Closed matyhtf closed 5 years ago
RFC-1013提案使TaskWorker内可以使用异步和协程API。由于Task设计之初未考虑支持异步和协程,因此带来了新的问题。
RFC-1013
TaskWorker
API
Task
return
Server::finish
onTask
go
增加task_enable_coroutine,开启后自动在onTask回调中创建协程,php代码可以直接使用协程API。 底层修改了onTask回调的参数。新增Swoole\Server\Task类,用于保存任务上下文,并返回结果。
task_enable_coroutine
php
Swoole\Server\Task
未开启task_enable_coroutine时,仍然使用旧版本的4参数回调
4
$server->on('Task', function ($serv, Swoole\Server\Task $task) { //来自哪个`Worker`进程 $task->workerId; //任务的编号 $task->id; //任务的类型,taskwait, task, taskCo, taskWaitMulti 可能使用不同的 flags $task->flags; //任务的数据 $task->data; //协程 API co::sleep(0.2); //完成任务,结束并返回数据 $task->finish([123, 'hello']); });
task_enable_coroutine必须在enable_coroutine == true时才可以使用
enable_coroutine == true
$server->set([ 'task_enable_coroutine' => true, ]);
由于task_async配置存在严重的问题,在新的版本中将移除。这与旧版本会存在兼容性问题。请务必注意。
task_async
仅存在两种模式:
现状
RFC-1013
提案使TaskWorker
内可以使用异步和协程API
。由于Task
设计之初未考虑支持异步和协程,因此带来了新的问题。return
返回值作为任务的结果Server::finish
可能会使用错误的任务上下文onTask
回调函数中仍然需要使用go
手工创建协程,无法直接使用协程组件修改
增加
task_enable_coroutine
,开启后自动在onTask
回调中创建协程,php
代码可以直接使用协程API
。 底层修改了onTask
回调的参数。新增Swoole\Server\Task
类,用于保存任务上下文,并返回结果。配置
废弃
由于
task_async
配置存在严重的问题,在新的版本中将移除。这与旧版本会存在兼容性问题。请务必注意。仅存在两种模式:
task_enable_coroutine
,Task
工作进程支持协程task_enable_coroutine
,仅支持同步阻塞