task模块用来做一些异步的慢速任务,比如webim中发广播,发送邮件等
task进程必须是同步阻塞的
task进程支持定时器
public function __construct()
{
$this->serv = new \swoole_websocket_server('0.0.0.0',9501);
}
$this->serv->set(array(
// 配置Task进程的数量,配置此参数后将会启用task功能。所以Server务必要注册onTask
'task_worker_num' => 2,
));
// 在task_worker进程内被调用。
$this->serv->on('task', array($this, 'onTask'));
// 当worker进程投递的任务在task_worker中完成时,
// task进程会通过swoole_server->finish()方法将任务处理的结果发送给worker进程
$this->serv->on('finish', array($this, 'onFinish'));
//投递一个任务
$this->serv->task('project1');
/**
* @Author change
* @DateTime 2018-12-20
* @Description Task进程在调用onTask回调函数时会将进程状态切换为忙碌,这时将不再接收新的Task,当onTask函数返回时会将进程状态切换为空闲然后继续接收新的Task。
* @参数说明
* @param [type]
* @param \swoole_server $server 服务器对象
* @param [type] $task_id 任务id
* @param [type] $src_worker_id 进程id
* @param [type] $data 数据
*/
public function onTask(\swoole_server $server, $task_id, $src_worker_id, $data)
{
// 调用成功,返回值为整数$task_id,表示此任务的ID。如果有finish回应,onFinish回调中会携带$task_id参数
// 调用失败,返回值为false,$task_id可能为0,因此必须使用===判断是否失败
echo '调用任务成功,任务id为:'.$task_id."\n";
echo '任务数据'.$data."\n";
}
onTask回调
注意事项:在task里面不能执行异步操作,必须是同步阻塞的。