基於 Swoole 搭建 WebSocket 服務詳解

PHP定製開發發表於2022-09-26

本節將會  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 的新檔案:

基於 Swoole 搭建 WebSocket 服務詳解

您可以透過在命令列上執行以下命令來啟動 WebSocket 服務。該命令如下所示:

php ws_websocket.php

可以在 Chrome 瀏覽器進行測試,JS 程式碼如下:

基於 Swoole 搭建 WebSocket 服務詳解

在 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章