swoole詳解


1、swoole結構圖

2、swoole流程圖

3、詳細流程圖

3.1、Master:處理核心事件驅動(主進程)
3.2、Reactor:
  處理TCP連接,收發數據的線程。Swoole的主線程在Accept新的連接后,會將這個連接分配給一個固定的Reactor線程,並由這個線程負責監聽此socket。在socket可讀時讀取數據,並進行協議解析,將請求投遞到Worker進程。在socket可寫時將數據發送給TCP客戶端。,

  3.2.1、負責維護客戶端TCP連接、處理網絡IO、處理協議、收發數據
  3.2.2完全是異步非阻塞的模式
  3.2.3、全部為C代碼,除Start/Shudown事件回調外,不執行任何PHP代碼
  3.2.4、將TCP客戶端發來的數據緩沖、拼接、拆分成完整的一個請求數據包
  3.2.5、Reactor以多線程的方式運行
3.3、Manager進程:

  3.3.1、swoole中worker/task進程都是由Manager進程Fork並管理的。
  3.3.2、子進程結束運行時,manager進程負責回收此子進程,避免成為僵屍進程。並創建新的子進程
  3.3.3、服務器關閉時,manager進程將發送信號給所有子進程,通知子進程關閉服務
  3.3.4、服務器reload時,manager進程會逐個關閉/重啟子進程
3.4、Worker進程:處理客戶端請求

  3.4.1、接受由Reactor線程投遞的請求數據包,並執行PHP回調函數處理數據
  3.4.2、生成響應數據並發給Reactor線程,由Reactor線程發送給TCP客戶端
  3.4.3、可以是異步非阻塞模式,也可以是同步阻塞模式
  3.4.4、Worker以多進程的方式運行
3.5、Task進程:異步工作進程

  3.5.1、接受由Worker進程通過swoole_server->task/taskwait方法投遞的任務
  3.5.2、處理任務,並將結果數據返回(swoole_server->finish)給Worker進程
  3.5.3、完全是同步阻塞模式
  3.5.4、TaskWorker以多進程的方式運行
3.6、Reactor、Worker、TaskWorker的關系:

  3.6.1、可以理解為Reactor就是nginx,Worker就是php-fpm。Reactor線程異步並行地處理網絡請求,然后再轉發給Worker進程中去處理。Reactor和Worker間通過UnixSocket進行通信。

  3.6.2、在php-fpm的應用中,經常會將一個任務異步投遞到Redis等隊列中,並在后台啟動一些php進程異步地處理這些任務。Swoole提供的Worker是一套更完整的方案,將任務的投遞、隊列、php任務處理進程管理合為一體。通過底層提供的API可以非常簡單地實現異步任務的處理。另外TaskWorker還可以在任務執行完成后,再返回一個結果反饋到Worker。

  3.6.3、Swoole的Reactor、Worker、TaskWorker之間可以緊密的結合起來,提供更高級的使用方式。

  3.6.4、一個更通俗的比喻,假設Server就是一個工廠,那Reactor就是銷售,接受客戶訂單。而Worker就是工人,當銷售接到訂單后,Worker去工作生產出客戶要的東西。而TaskWorker可以理解為行政人員,可以幫助Worker干些雜事,讓Worker專心工作。

  3.6.5、底層會為Worker進程、TaskWorker進程分配一個唯一的ID
  3.6.6、不同的Worker和TaskWorker進程之間可以通過sendMessage接口進行通信

3.7、 Task進程

  Task流程圖 

  • Task和Worker進程的通信通過unix socket進行
  • Task數據傳遞大小小於8K直接管道傳遞,大於8K寫入臨時文件傳遞
  • Task傳遞對象 i.可以通過序列化傳遞一個對象的拷貝(非應用)ii.Task對象的改變不會反應到worker中(連個進程中是獨立的)iii.數據庫連接,網絡連接對象不可傳遞
  • Task的Onfinish的回調會傳遞給調用給該task方法的worker進程(原路返回可尋)

Task 用途: 
模擬Mysql連接池

3. 8、Timer定時器

  • Timer基於epoll的timeout機制實現
  • 使用堆存放Timer,提高檢索效率


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM