PHP socket伺服器框架Workerman (GatewayWorker)
(1)建立在 TCP 協議之上,伺服器端的實現比較容易。
(2)與 HTTP 協議有著良好的相容性。預設埠也是80和443,並且握手階段採用 HTTP 協議,因此握手時不容易遮蔽,能通過各種 HTTP 代理伺服器。
(3)資料格式比較輕量,效能開銷小,通訊高效。
(4)可以傳送文字,也可以傳送二進位制資料。
(5)沒有同源限制,客戶端可以與任意伺服器通訊。
(6)協議識別符號是ws(如果加密,則為wss),伺服器網址就是 URL。
一、GatewayWorker簡介
GatewayWorker基於Workerman開發的一個專案框架,用於快速開發TCP長連線應用,例如app推送服務端、即時IM服務端、遊戲服務端、物聯網、智慧家居等等。
GatewayWorker使用經典的Gateway和Worker程序模型。Gateway程序負責維持客戶端連線,並轉發客戶端的資料給BusinessWorker程序處理,BusinessWorker程序負責處理實際的業務邏輯(預設呼叫Events.php處理業務),並將結果推送給對應的客戶端。Gateway服務和BusinessWorker服務可以分開部署在不同的伺服器上,實現分散式叢集。
GatewayWorker提供非常方便的API,可以全域性廣播資料、可以向某個群體廣播資料、也可以向某個特定客戶端推送資料。配合Workerman的定時器,也可以定時推送資料。
二、GatewayWorker 與 Workerman的關係
Workerman可以看做是一個純粹的socket類庫,可以開發幾乎所有的網路應用,不管是TCP的還是UDP的,長連線的還是短連線的。Workerman程式碼精簡,功能強大,使用靈活,能夠快速開發出各種網路應用。同時Workerman相比GatewayWorker也更底層,需要開發者有一定的多程序程式設計經驗。
因為絕大多數開發者的目標是基於Workerman開發TCP長連線應用,而長連線應用服務端有很多共同之處,例如它們有相同的程序模型以及單發、群發、廣播等介面需求。所以才有了GatewayWorker框架,GatewayWorker是基於Workerman開發的一個TCP長連線框架,實現了單發、群送、廣播
三、用GatewayWorker還是Workerman
- 如果你的專案是長連線並且需要客戶端與客戶端之間通訊,建議使用GatewayWorker。
- 短連線或者不需要客戶端與客戶端之間通訊的專案建議使用Workerman。
- GatewayWorker不支援UDP監聽,所以UDP服務請選擇Workerman。
四、GatewayWorker 注意點
客戶端的事件及資料全部由Gateway轉發給BusinessWorker處理,BusinessWorker預設呼叫Events.php中的onConnect onMessage onClose處理業務邏輯。
通過GatewayClient傳送的資料不會經過Event.php,而是直接經由Gateway程序轉發給客戶端。GatewayClient無法接收客戶端發來的資料。
除了 Workerman 外,還有比較流行的 Swoole