Swoole tcp服务task方法

投递一个异步任务到task_worker池中.此函数是非阻塞的,执行完毕会立即返回.Worker进程可以继续处理新的请求.使用Task功能,必须先设置task_worker_num,并且必须设置Server的onTask和onFinsh事件回调函数.

Swoole\Server->task(mixed $data, int $dstWorkerId = -1, callable $finishCallback): int

参数

$data,要投递的任务数据,必须是可序列化的PHP变量

$dstWorkerId, 可以指定要投递给哪个Task进程,传入Task进程的ID即可,范围为[0,$server->settting['task_worker_num'] -1]

$finishCallback ,finish回调函数,如果任务设置了回调函数,Task返回结果时会直接直接指定的回调函数,不再执行Server的onFinish回调,只有在Worker进程中投递任务才可以出发

返回值:

调用成功,返回值为整数$task_id,表示此任务的ID,如果有finish回调,onFinish回调中会携带$task_id参数

调用失败,返回值为false,$task_id可能为0,因此必须使用===判断成功与否

单向任务

从Master,Manager,UserProcess进程中投递的任务是单向的,在TaskWorker进程中无法使用return或$server->finish()方法返回数据

注意

task方法不能在task进程中调用

使用task方法必须为Server设置onTask和onFinish回调,否则Server->start会失败

task操作的次数必须小于onTask处理速度,如果投递容量超过处理能力,task数据会塞满缓存区,导致Worker进程发送阻塞,Worker进程无法接收新的请求

使用addProcess添加的用户进程中可以使用task单向投递任务,但不能返回结果数据,请使用sendMessage接口与Worker/Task进程通信

posted @ 2025-04-17 10:46  X__cicada  阅读(15)  评论(0)    收藏  举报