1. 程式人生 > >PHP socket伺服器框架Workerman (GatewayWorker)

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長連線框架,實現了單發、群送、廣播

等長連線必用的介面,並且內建了MySql類庫。GatewayWorker框架實現了Gateway Worker程序模型,天然支援分散式多伺服器部署,擴容縮容非常方便,能夠應對海量併發連線。可以說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