首頁  >  文章  >  php框架  >  ThinkPHP6中如何使用WebSocket進行即時通訊?

ThinkPHP6中如何使用WebSocket進行即時通訊?

WBOY
WBOY原創
2023-06-12 10:40:392034瀏覽

WebSocket是一種全雙工通訊協議,能夠在伺服器和客戶端之間建立即時連接,以實現即時通訊。在Web開發中,常用的PHP框架有ThinkPHP,那麼在ThinkPHP6中如何使用WebSocket進行即時通訊呢?

  1. 安裝swoole擴展

首先需要在伺服器上安裝swoole擴展,可使用composer命令進行安裝:

composer require swoole/swoole

注意:使用swoole擴展需要PHP版本>=7.0。

  1. 建立WebSocket服務

在ThinkPHP6中,可以透過自訂指令建立WebSocket服務。開啟命令列工具,進入專案根目錄,執行以下指令:

php think make:command WebSocket

執行完指令後,會在app/command目錄下產生WebSocket.php檔案。在該檔案中,新增以下程式碼:

<?php
namespace appcommand;

use swoole_websocket_server;
use swoole_http_request;
use thinkconsoleCommand;
use thinkconsoleInput;
use thinkconsoleOutput;

class WebSocket extends Command
{
    protected function configure()
    {
        // 给命令起一个名字
        $this->setName('swoole:websocket')
            ->setDescription('Start websocket server');
    }

    protected function execute(Input $input, Output $output)
    {
        $server = new swoole_websocket_server("0.0.0.0", 9501);

        // 监听WebSocket连接打开事件
        $server->on('open', function (swoole_websocket_server $server, swoole_http_request $request) {
            echo "connection open: {$request->fd}
";
        });

        // 监听WebSocket消息事件
        $server->on('message', function (swoole_websocket_server $server, $frame) {
            echo "received message: {$frame->data}
";

            // 广播消息给所有连接的客户端
            $server->push($frame->fd, "this is server");
        });

        // 监听WebSocket连接关闭事件
        $server->on('close', function ($ser, $fd) {
            echo "connection close: {$fd}
";
        });

        $server->start();
    }
}

執行以下指令,即可啟動WebSocket服務:

php think swoole:websocket
  1. 在檢視中使用WebSocket

#在視圖中,可以使用JavaScript的WebSocket API與服務端進行即時通訊。例如:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket</title>
</head>
<body>
    <script>
        var ws = new WebSocket('ws://localhost:9501');

        ws.onopen = function(){
            console.log('WebSocket open');
        };

        ws.onmessage = function(ev){
            console.log('WebSocket message: ' + ev.data);
        };

        ws.onclose = function(){
            console.log('WebSocket close');
        };
    </script>
</body>
</html>

以上程式碼建立了一個WebSocket實例,連接到本機WebSocket服務。當服務端發出訊息時,呼叫onmessage函數進行處理。可以透過呼叫實例的send函數向服務端發送訊息。

至此,WebSocket服務已成功建立並與前端建立即時通訊連線。

總結

在ThinkPHP6中,借助swoole擴展,可以輕鬆實現WebSocket即時通訊功能。透過自訂指令開啟WebSocket服務,再結合JavaScript WebSocket API,即可在Web應用中實現即時通信,滿足多種業務需求。

以上是ThinkPHP6中如何使用WebSocket進行即時通訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn