使用PHP實作WebSocket服務

WBOY
發布: 2023-06-22 13:00:01
原創
7173 人瀏覽過

隨著網路的發展,WebSocket技術越來越廣泛的應用。 WebSocket技術可實現雙向即時通信,適用於一些例如即時通訊、遊戲等應用場景,能夠提供更好的使用者體驗。本文將介紹使用PHP實作WebSocket服務的方法。

一、WebSocket簡介
WebSocket是HTML5提出的一個新協議,它是一種在單一TCP連接上進行全雙工通信的協議,支援即時通信,有著比HTTP更低的延遲,可進行大量資料傳輸。使用WebSocket可以實現即時通信,同時減少伺服器開銷,節省網路頻寬。

二、WebSocket實作方法

  1. 服務端

(1)建立WebSocket伺服器:

// 创建WebSocket服务器 $server = new swoole_websocket_server("0.0.0.0", 9502); // 监听WebSocket连接事件 $server->on('open', function (swoole_websocket_server $server, $request) { echo "client {$request->fd} connected "; }); // 监听WebSocket消息事件 $server->on('message', function (swoole_websocket_server $server, $frame) { // 处理接收到的消息 $message = "server received message: {$frame->data} "; // 向WebSocket客户端发送消息 $server->push($frame->fd, $message); }); // 监听WebSocket关闭事件 $server->on('close', function (swoole_websocket_server $server, $fd) { echo "client {$fd} closed "; }); // 启动WebSocket服务器 $server->start();
登入後複製

(2)服務端推播訊息:

// 向WebSocket客户端发送消息 $server->push($frame->fd, $message);
登入後複製
登入後複製
  1. 客戶端

(1)建立WebSocket連線:

// 创建WebSocket连接 var ws = new WebSocket("ws://localhost:9502"); // 监听WebSocket连接事件 ws.onopen = function() { console.log("WebSocket连接已打开"); }; // 监听WebSocket消息事件 ws.onmessage = function(event) { console.log("WebSocket收到消息:" + event.data); }; // 监听WebSocket关闭事件 ws.onclose = function() { console.log("WebSocket连接已关闭"); };
登入後複製

(2)客戶端傳送訊息:

// 向WebSocket服务器发送消息 ws.send("hello");
登入後複製
登入後複製

三、實作過程詳解

以下我們針對上述程式碼區塊的每個部分進行詳細介紹。

  1. 服務端

(1)建立WebSocket伺服器:

// 创建WebSocket服务器 $server = new swoole_websocket_server("0.0.0.0", 9502);
登入後複製

這段程式碼建立了一個WebSocket伺服器,指定IP位址為0.0.0.0 ,連接埠為9502。

(2)監聽WebSocket連線事件:

// 监听WebSocket连接事件 $server->on('open', function (swoole_websocket_server $server, $request) { echo "client {$request->fd} connected "; });
登入後複製

當有WebSocket客戶端連線時,會觸發'open'事件。這裡的$request是一個對象,包含了客戶端連線的一些訊息,例如客戶端的IP位址、連線時間等。

(3)監聽WebSocket訊息事件:

// 监听WebSocket消息事件 $server->on('message', function (swoole_websocket_server $server, $frame) { // 处理接收到的消息 $message = "server received message: {$frame->data} "; // 向WebSocket客户端发送消息 $server->push($frame->fd, $message); });
登入後複製

當WebSocket客戶端發送訊息時,會觸發'message'事件。這裡的$frame是一個對象,包含了接收到訊息的一些訊息,例如訊息的內容、發送時間等。

(4)監聽WebSocket關閉事件:

// 监听WebSocket关闭事件 $server->on('close', function (swoole_websocket_server $server, $fd) { echo "client {$fd} closed "; });
登入後複製

當WebSocket客戶端關閉連線時,會觸發'close'事件。這裡的$fd是客戶端連線的唯一識別碼。

(5)啟動WebSocket伺服器:

// 启动WebSocket服务器 $server->start();
登入後複製

使用start()方法啟動WebSocket伺服器,使其開始監聽客戶端的連線和訊息。

(6)服務端推播訊息:

// 向WebSocket客户端发送消息 $server->push($frame->fd, $message);
登入後複製
登入後複製

使用push()方法傳送訊息給指定客戶端。 $frame->fd是客戶端連線的唯一標識符,$message是要傳送的訊息內容。

  1. 客戶端

(1)建立WebSocket連接:

// 创建WebSocket连接 var ws = new WebSocket("ws://localhost:9502");
登入後複製

這段程式碼建立了一個WebSocket連接,指定URL為ws:// localhost:9502。其中,ws表示協定類型,localhost表示WebSocket伺服器的IP位址,9502表示監聽的連接埠號碼。

(2)監聽WebSocket連線事件:

// 监听WebSocket连接事件 ws.onopen = function() { console.log("WebSocket连接已打开"); };
登入後複製

當WebSocket連線成功時,會觸發'open'事件。在這裡我們使用console.log()方法輸出一則訊息。

(3)監聽WebSocket訊息事件:

// 监听WebSocket消息事件 ws.onmessage = function(event) { console.log("WebSocket收到消息:" + event.data); };
登入後複製

當WebSocket客戶端收到訊息時,會觸發'message'事件。在這裡我們使用console.log()方法輸出一則訊息。

(4)監聽WebSocket關閉事件:

// 监听WebSocket关闭事件 ws.onclose = function() { console.log("WebSocket连接已关闭"); };
登入後複製

當WebSocket連線關閉時,會觸發'close'事件。在這裡我們使用console.log()方法輸出一則訊息。

(5)客戶端傳送訊息:

// 向WebSocket服务器发送消息 ws.send("hello");
登入後複製
登入後複製

使用send()方法傳送訊息至WebSocket伺服器。這裡我們發送了一條字串"hello"。

四、總結

本文介紹了使用PHP實作WebSocket服務的方法。 WebSocket技術在即時通訊、遊戲等領域有著廣泛應用,有著比HTTP更低的延遲,能夠提供更好的使用者體驗。使用PHP實現WebSocket服務可以方便快速地實現即時通信,並減少伺服器開銷,節省網路頻寬。

以上是使用PHP實作WebSocket服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!