PHP socket 伺服器架構 workerman
Workerman是一款純PHP開發的開源的高效能的PHP socket 非同步架構。被廣泛的用於移動通訊、手遊服務端、網路遊戲伺服器、聊天室伺服器、硬體通訊伺服器、智能家居、車連網、物聯網等領域的開發。 支援Websocket、HTTP等協議,支援自訂協議。基於workerman開發人員可以更專註於商務邏輯開發,不必再為PHP Socket底層開發而煩惱。
workerman諸多的不同尋常的特性,使得PHP開發人員可以開發出不同尋常的應用程式。
官網地址: http://www.workerman.net
官網有很具體的開發文檔,這裡我就給大家介紹下 ,它的一些特性,功能還是很強大的!
純PHP開發
workerman完全使用PHP開發,使用workerman開發的應用程式不依賴php-fpm、apache、nginx這些容器就可以獨立運行。 這使得PHP開發人員開發、部署、調試應用程式非常方便。
支援PHP多進程
為了充分發揮伺服器多CPU的效能,workerman預設支援多進程多任務。workerman開啟一個主進程和多個子進程對外提供服務, 主進程負責監控子進程退出訊號,並負責產生新的子進程去處理服務,這樣做不僅提高了應用程式的效能,而且使得workerman更加穩定。
支援TCP、UDP
workerman支援TCP和UDP兩種傳輸層協議,只需要更改配置的一個欄位,便可以更換傳輸層協議,業務代碼無需任何改動。
支援長串連
很多時候需要PHP應用程式要與用戶端保持長串連,比如聊天室、遊戲等,但是傳統的PHP容器(apache、nginx、php-fpm)很難做到這一點。 使用workerman可以便於使用PHP長串連。php單個進程可以支援幾千甚至幾萬的並發串連,多進程則可支援數十萬甚至上百萬的並發串連。
支援各種應用程式層協議
介面上支援各種應用程式層協議,包括自訂協議。Workerman預設支援的協議有HTTP、WebSocket、以及簡單的Text文本協議。 同時Workerman提供了通用的協議介面,開發人員基於此介面便可以方便的開發出自己的協議。
支援高並發
workerman支援Libevent事件輪詢庫(需要安裝Libevent擴充), 使用Libevent在高並發時效能非常卓越,如果沒有安裝Libevent則使用PHP內建的Select相關係統調用。
支援服務平滑重啟
當需要重啟服務時(例如發布版本),我們不希望正在處理使用者請求的進程被立刻終止,更不希望重啟的那一刻沒有足夠的進程對外提供服務, 為了保證任意時刻都有足夠的進程對外提供服務,則可以使用平滑重啟命令,平滑重啟過程中workerman會讓子進程處理完請求後才退出, 並且能夠保證在任意時刻都有足夠的進程對外服務。
支援HHVM
支援HHVM,對於php效能有大幅度(一般為50%左右甚至更高)的提升,尤其是在cpu密集運算中。實際經過壓力測試確實有明顯效能提升效果。
支援以指定使用者運行子進程
因為子進程是實際處理使用者請求的進程,為了安全考慮,子進程不能有太高的許可權,所以workerman支援設定子運行進程啟動並執行使用者。
內建監控
workerman內部帶有監控統計模組,能夠統計workerman自身的一些資料,如進程退出次數及退出狀態,每個進程佔用記憶體大小及監聽的ip連接埠、每個進程啟動時間、 進程啟動並執行服務名、每個進程處理請求數、串連數、資料包發送失敗量等等。這些資訊可以本地運行php start.php status本地查看。
支援毫秒層級定時器
支援毫秒層級定時器,可以做定時任務或者定時計算,如遊戲中地圖上AI相關計算。
支援非同步IO
Workerman內建的網路IO介面是非同步,開發人員可實現基於事件的非同步編程
支援對象或者資源永久保持
在一個進程生命週期內靜態成員或者全域變數在不主動銷毀的情況下是永久保持的,也就是只要初始化一次靜態成員或者全域變數在當前進程的整個生命週期內的所有請求都可以複用這個 靜態成員或者全域變數。例如只要單個進程內初始化一次資料庫連接,則以後這個進程的所有請求都可以複用這個資料庫連接,不用每個使用者請求都去重連資料庫,避免了頻繁串連資料庫過程中TCP三向交握、 資料庫許可權驗證、中斷連線時TCP四次握手的過程,極大的提高了應用程式效率。memcache、redis等初始化也是同樣的道理。
高效能
由於php檔案從磁碟讀取解析一次後便會常駐記憶體,下次使用時直接使用記憶體中的opcode, 極大的減少了磁碟IO及PHP中請求初始化、建立執行環境、詞法解析、文法解析、編譯opcode、請求關閉等諸多耗時過程, 並且不依賴nginx、apache等容器,少了nginx等容器與PHP通訊的網路開銷,最主要的是資源可以永久保持,不必每次初始化資料庫連接等等, 所以使用workerman開發應用程式,效能非常高。
諸多應用
workerman擁有諸多的應用,如Thrift-Rpc、Json-Rpc、 聊天室、統計監控服務以及本站Web程式等. 目前workerman已經被多家公司使用,其中不乏日營業額過億的電子商務公司使用者訂單系統的開發,以及大型遊戲公司用於遊戲背景開發。
支援分布式部署
WorkerMan支援分布式部署,可以平滑的動態添加減少伺服器而不影響服務品質。從而使得WorkerMan叢集能夠支援相當大的輸送量或者並發TCP串連。
支援心跳檢測
Gateway/Worker開發模型支援服務端的心跳檢測,可以定時向用戶端發送應用程式層的心跳,能夠及時檢測到用戶端極端掉線情況(掉電、突髮網絡故障等)。