Swoole 的底層架構
首先我們來看下 swoole 的底層架構:
我們可以看到,Swoole 主要包含以下組件:
- Master:當我們運行啟動 Swoole 的 PHP 腳本時,首先會創建該進程(它是整個應用的 root 進程),然后由該進程 fork 出 Reactor 線程和 Manager 進程。
- Reactor:Reactor 是包含在 Master 進程中的多線程程序,用來處理 TCP 連接和數據收發(異步非阻塞方式)。Reactor 主線程在 Accept 新的連接后,會將這個連接分配給一個固定的 Reactor 線程,并由這個線程負責監聽此 socket。在 socket 可讀時讀取數據,并進行協議解析,將請求投遞到 Worker 進程;在 socket 可寫時將數據發送給 TCP 客戶端。
- Manager:Manager 進程負責 fork 并維護多個 Worker 子進程。當有 Worker 子進程中止時,Manager 負責回收并創建新的 Worker 子進程,以便保持 Worker 進程總數不變;當服務器關閉時,Manager 將發送信號給所有 Worker 子進程,通知其關閉服務。
- Worker:以多進程方式運行,每個子進程負責接受由 Reactor 線程投遞的請求數據包,并執行 PHP 回調函數處理數據,然后生成響應數據并發給 Reactor 線程,由 Reactor 線程發送給 TCP 客戶端。所有請求的處理邏輯都是在 Worker 子進程中完成,這是我們編寫業務代碼時真正要關心的部分。
- Task Worker:功能和 Worker 進程類似,同樣以多進程方式運行,但僅用于任務分發,當 Worker 進程將任務異步分發到任務隊列時,Task Worker 負責從隊列中消費這些任務(同步阻塞方式處理),處理完成后將結果返回給 Worker 進程。
Swoole 官方對 Reactor、Worker、Task Worker有一個形象的比喻,如果把基于 Swoole 的 Web 服務器比作一個工廠,那么 Reactor 就是這個工廠的銷售員,Worker 是負責生產的工人,銷售員負責接訂單,然后交給工人生產,而 Task Worker 可以理解為行政人員,負責提工人處理生產以外的雜事,比如訂盒飯、收快遞,讓工人可以安心生產。
Swoole 的生命周期回調函數
了解了 Swoole 的底層架構后,我們再來看看那些 Swoole 生命周期中的回調函數在哪些進程的哪個階段被調用,當 Master 主進程啟動或關閉時會觸發下面這兩個回調函數:
onStart onShutdown
而 Manager 管理進程啟動或關閉時會觸發下面這兩個回調函數:
onManagerStart
onManagerStop
Worker 進程的生命周期中,有多個回調函數:
onWorkerStart:Worker 進程啟動時
onWorkerStop: Worker 進程關閉時
onConnect:連接建立時
onClose:連接關閉時
onReceive:收到請求數據時
onFinish:投遞的任務處理完成時
Task Worker 進程也有兩個回調函數,分別在
onTask:由新任務投遞過來時
onWorkerStart:Task Worker 進程啟動時也會觸發
我們日常開發中主要關注的是 Worker 進程的回調函數,只需要在服務器實例上監聽相應的事件,并編寫對應的回調函數來處理相應的業務邏輯即可。
以上就是“帶你了解swoole的底層架構及運行原理”的詳細內容,想要獲取更多swoole教程歡迎關注編程學習網
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://phpxs.com/post/8171/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料
查 看2022高級編程視頻教程免費獲取