Swoole擴展的模式有哪些-創(chuàng)新互聯(lián)

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

十載的清河網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整清河建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“清河網(wǎng)站設(shè)計”,“清河網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

第一 Worker同步阻塞

這個模式的使用方法:

  • swoole_server設(shè)置為SWOOLE_PROCESS

  • 只使用Worker進程

  • 根據(jù)不同的情況設(shè)置worker_num的數(shù)值

  • 設(shè)置dispatch_mode參數(shù)為1或3

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

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

  1. 外網(wǎng)CURL調(diào)用。這個最慢,快的數(shù)百毫秒,慢的情況可能需要幾十秒

  2. 內(nèi)網(wǎng)RPC或Http接口,這個取決與這個接口的速度

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

  4. Redis/Memcache,內(nèi)存數(shù)據(jù)庫局域網(wǎng)而且是長連接,調(diào)用一次可能只需要幾百微秒也就是0.x毫秒就能返回

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

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

進程數(shù)量

根據(jù)上面的IO耗時,設(shè)置適當?shù)倪M程數(shù)量即可。

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

  • IO很快就可設(shè)置少量進程,如操作Redis、內(nèi)存文件系統(tǒng)、共享內(nèi)存

投遞模式

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

長連接應(yīng)用

比如聊天室,網(wǎng)絡(luò)游戲。連接之間需要交互的應(yīng)用。 可以使用 MySQL/Redis/文件 存儲用戶的連接fd,分組信息。要向某個用戶發(fā)數(shù)據(jù)可以根據(jù)UID查出對應(yīng)的fd,發(fā)送數(shù)據(jù)即可。發(fā)送分組,可以根據(jù)分阻ID查詢出fd列表,循環(huán)發(fā)送數(shù)據(jù)即可。

第二 Worker非阻塞+Task

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

使用方法

  • 使用SWOOLE_PROCESS模式

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

  • worker_num 設(shè)置為CPU核數(shù)

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

Worker進程

在這個模式中,Worker進程不能有任何同步阻塞的操作,只處理請求響應(yīng)或數(shù)據(jù)接收發(fā)送,僅進行PHP數(shù)組或?qū)ο蟛僮骰蚱渌嬎氵壿嫛>唧w參考 模式3 Worker進程全異步。

Task進程

無狀態(tài)地處理任務(wù),并返回結(jié)果。需要注意單個Task的執(zhí)行時間,避免處理時間太長導(dǎo)致Task排隊過多。

第三 Worker全異步

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

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

使用方法

  • dispatch_mode設(shè)置為2

  • worker_num 設(shè)置為CPU核數(shù)

邏輯實現(xiàn)

Worker進程內(nèi)的PHP代碼只能進行下列3種操作:

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

  • 進行PHP數(shù)組、對象操作或其他內(nèi)存計算邏輯

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

適用場景

  • 長連接服務(wù)

  • 對并發(fā)能力和吞吐量有較高要求

  • 團隊開發(fā)者技術(shù)水平較高

弊端和解決方案

  • 純異步需要使用嵌套回調(diào)的方式編寫代碼,與傳統(tǒng)的編程模式完全不同,異步是事件驅(qū)動式的,代碼不是順序執(zhí)行的。

  • 異步嵌套回調(diào)的方式在程序邏輯復(fù)雜后會變得難以維護

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

第四 Base模式+同步阻塞

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

與Process同步阻塞模式不同的是BASE模式下Worker進程的調(diào)度由操作系統(tǒng)實現(xiàn)。因此可以實現(xiàn)一個Leader-Follower模式的服務(wù)器程序。

使用方法

  • 使用SWOOLE_BASE模式

  • worker_num根據(jù)邏輯代碼的耗時情況設(shè)置幾百或幾十

  • worker進程內(nèi)使用同步阻塞IO操作

適用場景

  • 適合短連接 & 請求響應(yīng)式 服務(wù),如Web服務(wù)、RPC服務(wù)

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

第五 Process

Process提供了對進程管理的封裝。基于Process可實現(xiàn):

多進程+進程間通信編程

將其他語言編寫的程序包裝為子進程,重定向標準輸入輸出到管道,與該程序進行通信??蓪崿F(xiàn)任意編程語言為我PHP所用。

上述內(nèi)容就是Swoole擴展的模式有哪些,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標題:Swoole擴展的模式有哪些-創(chuàng)新互聯(lián)
當前路徑:http://muchs.cn/article26/dsjjjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號網(wǎng)站改版、企業(yè)網(wǎng)站制作、域名注冊面包屑導(dǎo)航、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)