日常對于比較耗時的操作,我們一般不影響性能和客戶體驗的情況,會将任務交給一個任務去執行,例如:發送郵件,廣播......
對于使用task任務,我們之前需要進行一個參數的必要設定:task_worker_num
配置Task程序的數量,配置此參數後将會啟用task功能。是以Server務必要注冊onTask、onFinish2個事件回調函數。如果沒有注冊,伺服器程式将無法啟動。
Task程序是同步阻塞的,配置方式與Worker同步模式一緻
最大值不得超過SWOOLE_CPU_NUM * 1000
必須注冊兩個事件: onTask和onFinish
onTask:
在task_worker程序内被調用。worker程序可以使用swoole_server_task函數向task_worker程序投遞新的任務。目前的Task程序在調用onTask回調函數時會将程序狀态切換為忙碌,這時将不再接收新的Task,當onTask函數傳回時會将程序狀态切換為空閑然後繼續接收新的Task。
function onTask(swoole_server $serv, int $task_id, int $src_worker_id, mixed $data);
$task_id是任務ID,由swoole擴充内自動生成,用于區分不同的任務。$task_id和$src_worker_id組合起來才是全局唯一的,不同的worker程序投遞的任務ID可能會有相同
$src_worker_id來自于哪個worker程序
$data 是任務的内容
onFinish:
當worker程序投遞的任務在task_worker中完成時,task程序會通過swoole_server->finish()方法将任務處理的結果發送給worker程序。
void onFinish(swoole_server $serv, int $task_id, string $data)
$task_id是任務的ID
$data是任務處理的結果内容