基於 Swoole 搭建 WebSocket 服務詳解
本節將會 詳 解 以 下 4 個問題:
什麼是 swoole?
什麼是 W ebsocket?
如何基於 Swoole 構建 WebSocket 服務?
基於 Swoole 的 WebSocket 服務和 Http 服務是什麼關係?
一、 Swoole 簡介
Swoole 是一個面向生產環境的 PHP 非同步網路通訊引擎,使 PHP 開發人員能夠編寫高效能的非同步併發 TCP、UDP、Unix Socket、HTTP 和 WebSocket 服務。Swoole 可廣泛應用於網際網路、行動通訊、企業軟體、雲端計算、網路遊戲、物聯網 (IOT)、車聯網、智慧家居等領域。使用 PHP+Swoole 作為網路通訊框架,可以大大提高企業 IT R&D 團隊的工作效率。
Swoole 支援用於構建各種伺服器,包括 HTTP 伺服器、websocket 伺服器、tcp 伺服器、redis 伺服器等等。我們在這裡使用 websocket 伺服器。
二、WebSocket 介紹
WebSocket 是透過單一 TCP 連線進行全雙工通訊的協議。WebSocket 通訊協議在 2011 年被 IETF 指定為標準 RFC 6455,並由 RFC7936 進行了補充。WebSocket API 也被 W3C 指定為標準。WebSocket 使得客戶端和伺服器之間的資料交換更加容易,並允許伺服器主動將資料推送到客戶端。在 WebSocket API 中,瀏覽器和伺服器只需要握手一次,就可以直接建立持久連線,進行雙向資料傳輸。
簡單來說,websocket 協議實現了瀏覽器和伺服器之間的雙向通訊。Html5 原生支援 websocket 協議。
三、 如何基於 Swoole 構建 WebSocket 服務
使用以下程式碼建立一個名為 ws_server.php 的新檔案:
您可以透過在命令列上執行以下命令來啟動 WebSocket 服務。該命令如下所示:
php ws_websocket.php
可以在 Chrome 瀏覽器進行測試,JS 程式碼如下:
在 Chrome 瀏覽器的控制檯上執行上述 js 程式碼,可以看到以下輸出結果:
Connected to WebSocket server.
如果要從客戶端向伺服器傳送資料,可以透過 WebSocket 的 send 函式向伺服器傳送資訊:
socket.send (' 傳送的內容 '); //socket 為 WebSocket 的物件例項
四、 基於 Swoole 的 WebSocket 服務和 Http 服務的關係
WebSocket 服務是基於 Http 服務的長連線伺服器,客戶端首現會傳送 Http 請求與伺服器握手。當握手成功時,將觸發 onOpen 事件。在 onOpen 函式中,可以獲得一個 $request 物件,該物件包含與 Http 握手相關的資訊,如 GET 引數、Cookie、Http 頭資訊等。
當客戶端和伺服器之間的連線建立後,客戶端和伺服器可以進行雙向通訊。連線建立後,當客戶端向伺服器傳送資訊時,伺服器會觸發 onMessage 事件回撥;伺服器可以呼叫 $server->push () 向客戶端傳送訊息。伺服器可以設定 onHandShake 事件回撥來手動處理 WebSocket 握手。
注意事項:
Swole _ Http _ server 是 swole _ Http _ server 的子類,內建了對 Http 的支援。swole _ WebSocket _ server 是 swole _ http _ server 的子類。在內建 WebSocket 的支援下,swoole_client 無法與 WebSocket 伺服器直接通訊。swoole_client 是一個 TCP 客戶端,必須實現 WebSocket 協議才能與 WebSocket 服務進行通訊。WebSocket 服務除了提供 WebSocket 功能外,其實還可以處理 Http 長連線。只需要 onRequest 事件監控就可以實現 Comet 方案的長 Http 輪詢。
完整附件
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70021881/viewspace-2916215/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於 swoole 的 websocket 服務一:狀態同步Web
- 基於 swoole 的 websocket 服務實現狀態同步Web
- WebSocket服務搭建Web
- 基於 ThinkJS 的 WebSocket 通訊詳解JSWeb
- 基於ECS搭建GitLab服務Gitlab
- 基於Nginx搭建WebDAV服務NginxWeb
- nestjs搭建HTTP與WebSocket服務JSHTTPWeb
- Go實現基於WebSocket的彈幕服務GoWeb
- 用 golang 去實現類似 swoole 的 websocket 服務 ?GolangWeb
- php-fpm模式下與Swoole Websocket服務如何聯絡PHP模式Web
- 基於ECS搭建FTP服務(阿里雲)FTP阿里
- laravel websocket服務 echo-server搭建(redis驅動)LaravelWebServerRedis
- 基於Swoole的Process程式管理模組支付結果回撥服務
- Swoole 系列之二(Websocket 要點講解)Web
- 基於Minio和Thumbor搭建獨立圖片服務
- 基於Docker快速搭建Gitlab與Gitlab CI/CD服務DockerGitlab
- SMB服務詳解
- Rsync服務詳解
- Keepalived服務詳解
- 使用swoole提供http服務HTTP
- 前端WebSocket詳解前端Web
- 從零搭建一個基於Istio的服務網格
- 基於websocket的celery任務狀態監控Web
- BeetleX之WebSocket詳解Web
- websocket 運用詳解Web
- WebSocket 協議詳解Web協議
- 服務雪崩的6種解決方案(基於ribbon)
- 如何基於MySQL及Redis搭建統一的KV儲存服務MySqlRedis
- swoole 服務的建構函式函式
- Nacos服務呼叫(基於Openfeign)
- java WebSocket 服務端程式碼JavaWeb服務端
- C#建立WebSocket服務端C#Web服務端
- Redis 訂閱 + swoole_websocket 推送RedisWeb
- 圖解Dubbo,Dubbo服務介面詳解圖解
- 基於Docker + Consul + Registrator的服務註冊與發現叢集搭建Docker
- 搭建基於 Laravel 6.0 - Laravels (swoole) 模組化開發架子(Layui 後臺)LaravelUI
- 搭建一個基於swoole的http框架來跑跑curd用作效能測試HTTP框架
- 網路地圖服務(WMS)詳解地圖