1. 程式人生 > >swoole基礎之task任務

swoole基礎之task任務

       日常對於比較耗時的操作,我們一般不影響效能和客戶體驗的情況,會將任務交給一個任務去執行,例如:傳送郵件,廣播......

 

        對於使用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是任務處理的結果內容