亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Swoole擴展的模式有哪些

發布時間:2021-03-05 14:47:10 來源:億速云 閱讀:136 作者:Leah 欄目:開發技術

本篇文章為大家展示了Swoole擴展的模式有哪些,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

第一 Worker同步阻塞

這個模式的使用方法:

  • swoole_server設置為SWOOLE_PROCESS

  • 只使用Worker進程

  • 根據不同的情況設置worker_num的數值

  • 設置dispatch_mode參數為1或3

  • Worker進程內使用同步阻塞的代碼編寫方式,這里不使用任何異步IO接口

這個模式的瓶頸就在與onRequestonReceive里代碼邏輯的處理速度。按照快慢可以分為幾種

  1. 外網CURL調用。這個最慢,快的數百毫秒,慢的情況可能需要幾十秒

  2. 內網RPC或Http接口,這個取決與這個接口的速度

  3. MySQL復雜查詢,一條SQL如果沒有索引可能需要幾百毫秒,甚至幾秒或更長時間。而如果是主鍵查詢或者索引足夠有效可能只需要幾毫秒

  4. Redis/Memcache,內存數據庫局域網而且是長連接,調用一次可能只需要幾百微秒也就是0.x毫秒就能返回

  5. 讀取磁盤文件,普通機械磁盤未命中PageCache引起磁盤尋道,可能需要幾十毫秒。SSD磁盤速度就快多了幾毫秒即可完成隨機讀取。

  6. 內存文件系統或共享內存,讀取/tmp或/dev/shm下的共享文件本質上是讀取共享內存,僅需幾微妙到幾十微秒即可完成。如果是直接讀共享內存可能更快,納秒級別。

進程數量

根據上面的IO耗時,設置適當的進程數量即可。

  • IO很慢就設置幾百個Worker進程,如操作MySQL、CURL、大量讀寫磁盤

  • IO很快就可設置少量進程,如操作Redis、內存文件系統、共享內存

投遞模式

如果請求是無狀態的可以使用dispatch_mode=1或3,輪循投遞或者區分忙閑投遞。

長連接應用

比如聊天室,網絡游戲。連接之間需要交互的應用。 可以使用 MySQL/Redis/文件 存儲用戶的連接fd,分組信息。要向某個用戶發數據可以根據UID查出對應的fd,發送數據即可。發送分組,可以根據分阻ID查詢出fd列表,循環發送數據即可。

第二 Worker非阻塞+Task

這種模式是典型的同步+異步,復雜的業務邏輯使用同步阻塞在Task進程中處理,簡單要求高并發的邏輯使用異步非阻塞在Worker進程中處理。

使用方法

  • 使用SWOOLE_PROCESS模式

  • dispatch_mode 設置為2(默認就是2,可不做任何設置)

  • worker_num 設置為CPU核數

  • task_worker_num 根據業務邏輯的耗時情況進行設置,如果平均耗時較長,需要設置數百個進程,耗時較短可設置幾十個進程

Worker進程

在這個模式中,Worker進程不能有任何同步阻塞的操作,只處理請求響應或數據接收發送,僅進行PHP數組或對象操作或其他計算邏輯。具體參考 模式3 Worker進程全異步。

Task進程

無狀態地處理任務,并返回結果。需要注意單個Task的執行時間,避免處理時間太長導致Task排隊過多。

第三 Worker全異步

這個模式就是真正的異步非阻塞編程,在代碼中只能使用Swoole提供的異步非阻塞IO操作,不得執行任何普通的PHP阻塞IO函數,如curl、mysql、redis、fsockopen、stream、socket、proc_open等。

與模式二 不同的是全異步服務器不使用Task進程,即使是很復雜的業務邏輯也在Worker進程中執行。純異步編程需要對開發者要求較高。

使用方法

  • dispatch_mode設置為2

  • worker_num 設置為CPU核數

邏輯實現

Worker進程內的PHP代碼只能進行下列3種操作:

  • 使用swoole_redis、swoole_mysql、swoole_http_client、swoole_client+async操作

  • 進行PHP數組、對象操作或其他內存計算邏輯

  • 使用swoole_server的send、push、close、response->end等操作

適用場景

  • 長連接服務

  • 對并發能力和吞吐量有較高要求

  • 團隊開發者技術水平較高

弊端和解決方案

  • 純異步需要使用嵌套回調的方式編寫代碼,與傳統的編程模式完全不同,異步是事件驅動式的,代碼不是順序執行的。

  • 異步嵌套回調的方式在程序邏輯復雜后會變得難以維護

可使用 Promise 或 Yield/Generator 簡化異步編程。

第四 Base模式+同步阻塞

Base模式是一個簡化版本,Base模式下Swoole的運行原理與Node.js完全一致,是單線程的。對TCP客戶端的Accept、Send、Recv、Close都是同一個進程內操作的。

與Process同步阻塞模式不同的是BASE模式下Worker進程的調度由操作系統實現。因此可以實現一個Leader-Follower模式的服務器程序。

使用方法

  • 使用SWOOLE_BASE模式

  • worker_num根據邏輯代碼的耗時情況設置幾百或幾十

  • worker進程內使用同步阻塞IO操作

適用場景

  • 適合短連接 & 請求響應式 服務,如Web服務、RPC服務

  • 這種模式不能實現單連接并發,客戶端的連接被某個Worker進程Accept之后,只能在此進程內處理請求

第五 Process

Process提供了對進程管理的封裝。基于Process可實現:

多進程+進程間通信編程

將其他語言編寫的程序包裝為子進程,重定向標準輸入輸出到管道,與該程序進行通信。可實現任意編程語言為我PHP所用。

上述內容就是Swoole擴展的模式有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安陆市| 湘阴县| 临西县| 峨边| 和顺县| 礼泉县| 昌平区| 大石桥市| 诸暨市| 裕民县| 河曲县| 墨江| 丹棱县| 通化市| 竹山县| 清原| 乌兰察布市| 巴中市| 泰来县| 普定县| 安平县| 广丰县| 错那县| 天津市| 邳州市| 万年县| 合江县| 万源市| 普安县| 沅陵县| 罗江县| 资源县| 连平县| 荣成市| 乐昌市| 云霄县| 方山县| 天柱县| 江阴市| 金塔县| 泸州市|