以下由workerman php教學欄位來介紹WorkerMan的特性,希望對需要的朋友有幫助!
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事件輪詢庫(需要安裝Libevent擴充功能), 使用Libevent在高並發時效能非常卓越,如果沒有安裝Libevent則使用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%左右
更多Workerman相關技術文章,請造訪Workerman教學欄位進行學習!
以上是WorkerMan的特性的詳細內容。更多資訊請關注PHP中文網其他相關文章!