在swoole中,一個swoole_server的擁有若干回調函數,這些回調函數決定了swoole_server的相關功能。能夠經過php
$serv->on( string $event, mixed $callback );html
描述:接收數據的回調
函數原型:react
function onReceive( swoole_server $serv, $fd, $from_id, $data );
參數 | 描述 |
---|---|
$serv | swoole_server對象 |
$fd | 鏈接的描述符 |
$from_id | reactor的id,無用 |
$data | 接收到的數據 |
說明:每當server接收到客戶端發來的數據後,就會經過onReceive回調將數據投遞給Worker。若是開啓了協議檢測,則會在收到完整數據包以後纔會響應回調。注意,必須設置該回調函數,不然沒法啓動服務器。git
描述:服務器啓動的回調
函數原型:github
function onStart( swoole_server $serv);
參數 | 描述 |
---|---|
$serv | swoole_server對象 |
說明:
onStart事件在Master進程的主線程中被調用。在此回調響應以前Swoole Server已進行了以下操做服務器
接下來要執行swoole
onStart回調中,僅容許echo、打印Log、修改進程名稱。不得執行其餘操做。onWorkerStart和onStart回調是在不一樣進程中並行執行的,不存在前後順序。 能夠在onStart回調中,將$serv->master_pid和$serv->manager_pid的值保存到一個文件中。這樣能夠編寫腳本,向這兩個PID發送信號來實現關閉和重啓的操做。
從1.7.5+ Master進程內再也不支持定時器,onMasterConnect/onMasterClose2個事件回調也完全移除。Master進程內再也不保留任何PHP的接口。
在onStart中建立的全局資源對象不能在worker進程中被使用,由於發生onStart調用時,worker進程已經建立好了。新建立的對象在主進程內,worker進程沒法訪問到此內存區域,所以全局對象建立的代碼須要放置在swoole_server_start以前。併發
描述:Worker進程啓動的回調
函數原型:函數
function onWorkerStart( swoole_server $serv,int $worker_id);
參數 | 描述 |
---|---|
$serv | swoole_server對象 |
$worker_id | Worker進程的id |
說明:此事件在worker進程/task_worker啓動時發生。ui
發生PHP致命錯誤或者代碼中主動調用exit時,Worker/Task進程會退出,管理進程會從新建立新的進程 onWorkerStart/onStart是併發執行的,沒有前後順序
經過$worker_id參數的值來,判斷worker是普通worker仍是task_worker。$worker_id>= $serv->setting['worker_num'] 時表示這個進程是task_worker。
若是想使用swoole_server_reload實現代碼重載入,必須在workerStart中require你的業務文件,而不是在文件頭部。在onWorkerStart調用以前已包含的文件,不會從新載入代碼。
能夠將公用的,不易變的php文件放置到onWorkerStart以前。這樣雖然不能重載入代碼,但全部worker是共享的,不須要額外的內存來保存這些數據。
onWorkerStart以後的代碼每一個worker都須要在內存中保存一份 $worker_id是一個從0-$worker_num之間的數字,表示這個worker進程的ID $worker_id和進程PID沒有任何關係
描述:新鏈接接入時的回調
函數原型:
function onConnect( swoole_server $serv,int $fd, int $from_id);
參數 | 描述 |
---|---|
$serv | swoole_server對象 |
$fd | 鏈接的描述符 |
$from_id | reactor的id,無用 |
說明:有新的鏈接進入時,在worker進程中回調。onConnect/onClose這2個回調發生在worker進程內,而不是主進程。若是須要在主進程處理鏈接/關閉事件,請註冊onMasterConnect/onMasterClose回調。onMasterConnect/onMasterClose回調老是先於onConnect/onClose被執行
描述:鏈接關閉時的回調
函數原型:
function onClose( swoole_server $serv,int $fd, int $from_id);
參數 | 描述 |
---|---|
$serv | swoole_server對象 |
$fd | 鏈接的描述符 |
$from_id | reactor的id,無用 |
說明:TCP客戶端鏈接關閉後,在worker進程中回調此函數。不管close由客戶端發起仍是服務器端主動調用swoole_server_close關閉鏈接,都會觸發此事件。 所以只要鏈接關閉,就必定會回調此函數。
描述:task_worker進程處理任務的回調
函數原型:
function onTask(swoole_server $serv, int $task_id, int $from_id, string $data);
參數 | 描述 |
---|---|
$serv | swoole_server對象 |
$task_id | 任務ID |
$from_id | 來自於哪一個worker進程 |
$data | 任務內容 |
說明:在task_worker進程內被調用。worker進程可使用swoole_server_task函數向task_worker進程投遞新的任務。能夠直接將任務結果字符串經過return方式返回給worker進程。worker進程將在onFinish回調中收到結果。注:若是serv->set(array('task_worker_num' => 8)) task_id 並非從1-8 而是遞增的。
描述:task_worker進程處理任務結束的回調
函數原型:
function onFinish(swoole_server $serv, int $task_id, string $data);
參數 | 描述 |
---|---|
$serv | swoole_server對象 |
$task_id | 任務ID |
$data | 任務結果 |
說明:在此函數中會收到任務處理的結果,經過task_id和worker_id來區分不一樣的任務。
描述:定時器觸發的回調
函數原型:
function onTimer(swoole_server $serv, int $interval);
參數 | 描述 |
---|---|
$serv | swoole_server對象 |
$interval | 定時的間隔 |
說明:定時器被觸發時,該函數被調用。經過interval來區分不一樣時間間隔的定時器。