天天看點

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是任務處理的結果内容