swoole基礎之task任務
阿新 • • 發佈:2018-12-24
日常對於比較耗時的操作,我們一般不影響效能和客戶體驗的情況,會將任務交給一個任務去執行,例如:傳送郵件,廣播......
對於使用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是任務處理的結果內容