ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP6 でリアルタイム通信に WebSocket を使用するにはどうすればよいですか?

ThinkPHP6 でリアルタイム通信に WebSocket を使用するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-06-12 10:40:391993ブラウズ

WebSocket は、サーバーとクライアントの間にリアルタイム接続を確立してリアルタイム通信を実現できる全二重通信プロトコルです。 Web 開発で一般的に使用される PHP フレームワークは ThinkPHP ですが、ThinkPHP6 でリアルタイム通信に WebSocket を使用するにはどうすればよいでしょうか?

  1. swoole 拡張機能のインストール

まず、サーバーに swoole 拡張機能をインストールする必要があります。インストールするには、composer コマンドを使用できます:

composer require swoole/swoole

Note : PHP バージョン >=7.0 が必要な swoole 拡張機能を使用します。

  1. WebSocket サービスの作成

ThinkPHP6 では、カスタム コマンドを使用して WebSocket サービスを作成できます。コマンド ライン ツールを開き、プロジェクトのルート ディレクトリに入り、次のコマンドを実行します。

php think make:command WebSocket

コマンドを実行すると、WebSocket.php ファイルが app/command ディレクトリに生成されます。このファイルに、次のコードを追加します。

<?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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。