由于swoft框架开发的时候,swoole的TaskWorker尚不支持运行协程代码。现在我们要对框架进行改造,使之能能运行协程代码。
1..env增加# Swoole Settings下增加TASK_ENABLE_CO=true
2.config/server.php setting数组中增加'task_enable_coroutine' => env('TASK_ENABLE_CO', false)
3.vendor/swoft/framework/src/Bootstrap/Listeners/Interfaces/TaskInterface.php修改public function onTask(Server $server, int $taskId, int $workerId, $data);为public function onTask(Server $server, ...$params);
4.vendor/swoft/Task/src/Bootstrap/Listeners/TaskEventListener.php修改onTask方法
if (isset($params[0]) && get_class($params[0]) == 'Swoole\Server\Task') {
$result = $taskExecutor->run($params[0]->data);
} else {
$result = $taskExecutor->run($params[2]);
}
搞定,重启应用试试吧!