Workerman 是一個高效能的PHP socket 伺服器架構,workerman基於PHP多進程以及libevent事件輪詢庫,PHP開發人員只要實現一兩個介面,便可以開發出自己的網路應用,例如Rpc服務、聊天室伺服器、遊戲伺服器等。
Workerman 的目標是讓PHP開發人員更容易的開發出基於socket的高效能的應用服務,而不用去瞭解PHP socket以及PHP多進程細節。 workerman本身是一個PHP多進程伺服器架構,具有PHP進程管理以及socket通訊的模組,所以不依賴php-fpm、nginx或者apache等這些容器便可以獨立運行。
特性
-
使用PHP開發
-
支援PHP多進程
-
支援TCP/UDP
-
介面上支援各種應用程式層協議
-
支援libevent事件輪詢庫,支援高並發
-
支援服務平滑重啟
-
支援PHP檔案更新檢測及自動載入
-
支援PHP長串連
-
支援以指定使用者運行子進程
-
支援telnet遠端控制
-
高效能
基於workerman已經有很多的網路應用程式,例例如 多人線上小蝌蚪遊戲 、 PHP-Json-Rpc 、 PHP-Thrift-Rpc 、 PHP-WebSocket聊天室 、 PHP統計監控系統 等等。
範例程式碼:
count = 4;// 當收到用戶端發來的資料後返回hello $data給用戶端$ws_worker->onMessage = function($connection, $data){ // 向用戶端發送hello $data $connection->send('hello ' . $data);};// 運行Worker::runAll();
效能壓力測試
測試環境:
系統:ubuntu 12.04 LTS 64位記憶體:8Gcpu:Intel® Core i3-3220 CPU @ 3.30GHz × 4
商務邏輯:
hello world
結果:
短連結(每次請求完成後關閉連結,下次請求建立新的連結):條件: 壓測指令碼開500個線程,每個線程連結Workerman 10W次,每次連結發送1個請求結果: 輸送量:3W/S , cpu:60% , 記憶體佔用:4*8M = 32M
長連結(每次請求後不關閉連結,下次請求繼續複用這個連結):條件: 壓測指令碼開1000個線程,每個線程連結Workerman 1次,每個連結發送10W請求結果: 輸送量:13W/S , cpu:68% , 記憶體佔用:4*8M = 32M
無流量抖動,無記憶體流失,效能非常強悍
workerman啟動介面:
workerman狀態查看介面: