Workerman 網站是一個高效能的PHP socket 伺服器框架,workerman基於PHP多程序以及libevent事件輪詢庫,PHP開發者只要實現一兩個介面,便可以開發出自己的網路應用,例如Rpc服務、聊天室伺服器、手機遊戲伺服器等。
workerman的目標是讓PHP開發者更容易的開發出基於socket的高效能的應用服務,而不用去了解PHP socket以及PHP多程序細節。 workerman本身是一個PHP多程序伺服器框架,具有PHP程序管理以及socket通訊的模組,所以不依賴php-fpm、nginx或者apache等這些容器便可以獨立執行。
workerman諸多的不同尋常的特性,使得PHP開發者可以開發出不同尋常的應用程式:
1.純PHP開發:workerman完全使用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長連線。php單個程序可以支援幾千甚至幾萬的併發連線,多程序則可支援數十萬甚至上百萬的併發連線。
5.支援各種應用層協議:介面上支援各種應用層協議,包括自定義協議。Workerman預設支援的協議有HTTP、WebSocket、以及簡單的Text文字協議。 同時Workerman提供了通用的協議介面,開發者基於此介面便可以方便的開發出自己的協議。
6.支援高併發:workerman支援Libevent事件輪詢庫(需要安裝Libevent擴充套件), 使用Libevent在高併發時效能非常卓越,如果沒有安裝Libevent則使用PHP內建的Select相關係統呼叫。
7.支援服務平滑重啟:當需要重啟服務時(例如釋出版本),我們不希望正在處理使用者請求的程序被立刻終止,更不希望重啟的那一刻沒有足夠的程序對外提供服務, 為了保證任意時刻都有足夠的程序對外提供服務,則可以使用平滑重啟命令,平滑重啟過程中workerman會讓子程序處理完請求後才退出, 並且能夠保證在任意時刻都有足夠的程序對外服務。
8.支援檔案更新檢測及自動載入:基於workerman開發應用程式過程中,我們希望在我們改動程式碼後能夠立刻生效,則只要你開啟配置中debug功能即可。 開啟後workerman會有一個單獨的程序輪詢(因為PHP在Mac系統無法使用linux核心提供的Inotify機制,所以只好輪詢)應用程式真實使用的所有PHP檔案, 當檔案有更新時,啟動平滑重啟,自動載入新的PHP檔案。
9.支援以指定使用者執行子程序:因為子程序是實際處理使用者請求的程序,為了安全考慮,子程序不能有太高的許可權,所以workerman支援設定子執行程序執行的使用者。
10.自帶監控:workerman內部帶有監控統計模組,能夠統計workerman自身的一些資料,如程序退出次數及退出狀態,每個程序佔用記憶體大小及監聽的ip埠、每個程序啟動時間、 程序執行的服務名、每個程序處理請求數、連線數、資料包傳送失敗量等等。這些資訊可以本地執行php start.php status本地檢視。
11.支援毫秒級別定時器:支援毫秒級別定時器,可以做定時任務或者定時計算,如遊戲中地圖上AI相關計算。
12.支援非同步IO:Workerman自帶的網路IO介面是非同步的,開發者可實現基於事件的非同步程式設計。
13.支援物件或者資源永久保持:在一個程序生命週期內靜態成員或者全域性變數在不主動銷燬的情況下是永久保持的,也就是隻要初始化一次靜態成員或者全域性變數則整個程序生命週期內的所有請求都可以複用這個 靜態成員或者全域性變數。例如只要單個程序內初始化一次資料庫連線,則以後這個程序的所有請求都可以複用這個資料庫連線,不用每個使用者請求都去重連資料庫,避免了頻繁連線資料庫過程中TCP三次握手、 資料庫許可權驗證、斷開連線時TCP四次握手的過程,極大的提高了應用程式效率。memcache、redis等初始化也是同樣的道理。
14.高效能:由於php檔案從磁碟讀取解析一次後便會常駐記憶體,下次使用時直接使用記憶體中的opcode, 極大的減少了磁碟IO及PHP中請求初始化、建立執行環境、詞法解析、語法解析、編譯opcode、請求關閉等諸多耗時過程, 並且不依賴nginx、apache等容器,少了nginx等容器與PHP通訊的網路開銷,最主要的是資源可以永久保持,不必每次初始化資料庫連線等等, 所以使用workerman開發應用程式,效能非常高。
15.諸多應用:workerman擁有諸多的應用,如Thrift-Rpc、Json-Rpc、 聊天室、統計監控服務以及本站Web程式等. 目前workerman已經被多家公司使用,其中不乏日營業額過億的電子商務公司使用者訂單系統的開發,以及大型遊戲公司用於遊戲後臺的開發。
16.支援分散式部署:WorkerMan支援分散式部署,可以平滑的動態新增減少伺服器而不影響服務質量。從而使得WorkerMan叢集能夠支援相當大的吞吐量或者併發TCP連線。
17.支援HHVM:支援HHVM,對於php效能有大幅度(一般為50%左右甚至更高)的提升,尤其是在cpu密集運算中。實際經過壓力測試確實有明顯效能提升效果。
18.支援心跳檢測:Gateway/Worker開發模型支援服務端的心跳檢測,可以定時向客戶端傳送應用層的心跳,能夠及時檢測到客戶端極端掉線情況(掉電、突發網路故障等)。