配置与启用
任务配置参数,可以直接在对应的 Server->setting
配置即可,如果要启用任务更简单,Server
新增一个 on
事件。
协程任务
Http Server 配置开启任务为例:
return [
'httpServer' => [
// ...
'on' => [
SwooleEvent::TASK => \bean(TaskListener::class), // Enable task must task and finish event
SwooleEvent::FINISH => \bean(FinishListener::class)
],
/* @see HttpServer::$setting */
'setting' => [
'task_worker_num' => 12,
'task_enable_coroutine' => true
]
],
]
task_enable_coroutine
必须为true
- task 事件和finish 事件必须配置,且为
TaskListener::class
和FinishListener::class
Rpc Server 配置开启任务为例:
return [
'rpcServer' => [
// ...
'on' => [
SwooleEvent::TASK => \bean(TaskListener::class), // Enable task must task and finish event
SwooleEvent::FINISH => \bean(FinishListener::class)
],
/* @see HttpServer::$setting */
'setting' => [
'task_worker_num' => 12,
'task_enable_coroutine' => true
]
],
]
wsServer Server 配置开启任务为例:
return [
'wsServer' => [
// ...
'on' => [
SwooleEvent::TASK => \bean(TaskListener::class), // Enable task must task and finish event
SwooleEvent::FINISH => \bean(FinishListener::class)
],
/* @see HttpServer::$setting */
'setting' => [
'task_worker_num' => 12,
'task_enable_coroutine' => true
]
],
]
任务配置与启用,在
Http Server
/Rpc Server
/Websocket Server
都完全一样,启用任务需要监听task
finish
两个事件。
同步阻塞任务
Swoft 不仅提供协程任务,并且支持同步任务,同步任务和协程任务只能选择一种运行,两种不能同时存在。同步任务只需配置 task
事件,不支持异步 finish
事件。官方建议使用协程任务实现业务,
如果需要通过任务实现MongoDB、PostgreSQL 类似这种场景才使用同步任务。
2.0.4+ 支持
如下已 Http-server 为例:
return [
'httpServer' => [
// ...
'on' => [
SwooleEvent::TASK => bean(SyncTaskListener::class), // Enable sync task
],
/* @see HttpServer::$setting */
'setting' => [
'task_worker_num' => 6,
'task_enable_coroutine' => false
]
],
]
task_enable_coroutine
必须设置为false
- task 事件必须是
SyncTaskListener::class
同步阻塞任务,不能直接使用框架提供的所有 IO 操作(数据库、缓存、RPC等等)以及应用日志,控制器日志可以使用。 同步阻塞任务的定义和使用与协程任务一样,但是没有上下文。