swoole / rfc

Swoole 提案
116 stars 3 forks source link

RFC-1014 : TaskWorker 支持内置协程 #36

Closed matyhtf closed 5 years ago

matyhtf commented 5 years ago

现状

RFC-1013提案使TaskWorker内可以使用异步和协程API。由于Task设计之初未考虑支持异步和协程,因此带来了新的问题。

修改

增加task_enable_coroutine,开启后自动在onTask回调中创建协程,php代码可以直接使用协程API。 底层修改了onTask回调的参数。新增Swoole\Server\Task类,用于保存任务上下文,并返回结果。

未开启task_enable_coroutine时,仍然使用旧版本的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时才可以使用

$server->set([
    'task_enable_coroutine' => true,
]);

废弃

由于task_async配置存在严重的问题,在新的版本中将移除。这与旧版本会存在兼容性问题。请务必注意。

仅存在两种模式: