Workerman的特性

1、純PHP開發

使用Workerman開發的應用程式不依賴php-fpm、apache、nginx這些容器就可以獨立運行。這使得PHP開發者開發、部署、除錯應用程式非常方便。

2、支持PHP多進程

為了充分發揮伺服器多CPU的性能,Workerman預設支持多進程多任務。Workerman開啟一個主進程和多個子進程對外提供服務,主進程負責監控子進程,子進程獨自監聽網路連接並接收發送及處理資料,由於進程模型簡單,使得Workerman更加穩定,更加高效。

3、支持TCP、UDP

Workerman支持TCP和UDP兩種傳輸層協定,只需要更改一個屬性便可以更換傳輸層協定,業務程式碼無需改動。

4、支持長連接

很多時候需要PHP應用程式要與客戶端保持長連接,比如聊天室、遊戲等,但是傳統的PHP容器(apache、nginx、php-fpm)很難做到這一點。使用Workerman,只要伺服器業務不主動呼叫關閉連接介面,便可以使用PHP長連接。Workerman單個進程可以支持上萬的並發連接,多進程則支持數十萬的甚至百萬並發連接。

5、支持各種應用層協定

Workerman介面上支持各種應用層協定,包括自訂協定。在Workerman中更換協定同樣非常簡單,同樣只是配置一個欄位,協定自動切換,業務程式碼零改動,甚至可以開啟多個不同協定的端口,以滿足不同的客戶端需求。

6、支持高並發

Workerman支持Libevent事件輪詢庫(需要安裝event擴展),使用Event在長連接高並發時性能非常卓越,如果沒有安裝Event擴展則使用PHP內建的Select相關系統調用,性能也同樣非常強悍。

7、支持服務平滑重啟

當需要重啟服務時(例如發布版本),我們不希望正在處理使用者請求的進程被立刻終止,更不希望重啟的那一刻導致客戶端通訊失敗。Workerman提供了平滑重啟功能,能夠保障服務平滑升級,不影響客戶端的使用。

8、支持文件更新檢測及自動加載

在開發過程中,我們希望在我們改動程式碼後能夠立刻生效,以便查看結果。Workerman提供了FileMonitor文件監控元件,只要文件有更新,Workerman會自動執行reload,以便加載新的文件,使之生效。

9、支持以指定使用者運行子進程

因為子進程是實際處理使用者請求的進程,為了安全考量,子進程不能有太高的權限,所以Workerman支持設定子運行進程運行的使用者,使你的伺服器更加安全。

10、支持對象或者資源永久保持

Workerman在運行過程中只會載入解析一次PHP文件,然後便常駐內存,這使得類及函數聲明、PHP執行環境、符號表等不會重複創建銷毀,這與Web容器下運行的PHP機制是完全不同的。在Workerman中,一個進程生命週期內靜態成員或者全局變數在不主動銷毀的情況下是永久保持的,也就是將對象或者連接等資源放到全局變數或者類靜態成員中則當前進程的整個生命週期內的所有請求都可以重複使用。例如只要單個進程內初始化一次資料庫連接,則以後這個進程的所有請求都可以重複使用這個資料庫連接,避免了頻繁連接資料庫過程中TCP三次握手、資料庫權限驗證、斷開連接時TCP四次握手的過程,極大的提高了應用程式效率。

11、高性能

由於php文件從磁碟讀取解析一次後便會常駐內存,下一次使用時直接使用內存中的opcode,極大的減少了磁碟IO及PHP中請求初始化、創建執行環境、詞法解析、語法解析、編譯opcode、請求關閉等諸多耗時過程,並且不依賴nginx、apache等容器,少了nginx等容器與PHP通訊的開銷,最主要的是資源可以永久保持,不必每次初始化資料庫連接等等,所以使用Workerman開發應用程式,性能非常高。

12、支持HHVM

支持在HHVM虛擬機上運行,可成倍提升PHP性能。尤其是在cpu密集運算業務中,性能非常優異。透過實際壓力測試對比,在沒有負載業務的情況下,Workerman在HHVM下運行比在Zend PHP5.6運行網路吞吐量提高了30-80%左右。

13、支持分佈式部署

14、支持守護進程化

15、支持多端口監聽

16、支持標準輸入輸出重定向