ホームページ  >  記事  >  PHPフレームワーク  >  Swoole が Websocket のブロードキャスト機能をサポートする仕組み

Swoole が Websocket のブロードキャスト機能をサポートする仕組み

PHPz
PHPzオリジナル
2023-06-25 14:49:281243ブラウズ

インターネット技術の継続的な発展により、Websocket は非常に人気のある通信プロトコルになりました。高性能ネットワーク通信フレームワークとして、Swoole は Websocket の強力なサポートも開始しました。この記事では、SwooleがWebsocketのブロードキャスト機能をどのようにサポートしているかを詳しく紹介します。

Websocket 通信プロトコルの特徴

Swoole が Websocket のブロードキャスト機能をどのようにサポートしているかを説明する前に、Websocket 通信プロトコルの特徴を簡単に紹介します。

Websocket は TCP ベースのプロトコルであり、双方向通信プロトコルであり、HTTP プロトコルと比較して、リアルタイム通信のシナリオに適しています。 Websocket プロトコルの接続プロセスは HTTP プロトコルに似ており、接続が成功すると、クライアントとサーバーは自由にメッセージを送信し、いつでも切断できます。

Websocket 通信プロトコルでは、テキスト メッセージ、バイナリ メッセージ、および Ping/Pong メッセージという 3 つの一般的なメッセージ タイプが使用されます。このうち、テキスト メッセージとバイナリ メッセージは通常のデータ送信ですが、Ping/Pong メッセージは接続が維持されているかどうかを検出するために使用されます。

Websocket 通信プロトコルはリアルタイム通信シナリオにより適しているため、多くの場合、実装プロセス中にブロードキャスト機能をサポートする必要があります。

Swoole による Websocket のサポート

Swoole は、高性能ネットワーク通信フレームワークとして、バージョン 0.4.0 以降、Websocket 通信プロトコルを強力にサポートし始めました。現在、Swoole でサポートされている Websocket バージョンには次のものがあります:

  1. RFC 6455 (ハンドシェイク プロセスとすべての標準データ フレームをサポート)。
  2. Hybi-10 (クローズフレームを除く)。

Swoole の Websocket サポートには次の部分が含まれます:

  1. Websocket サーバー: Websocket サーバー プログラムを提供し、Websocket ハンドシェイクやデータ送信などを処理します。
  2. Websocket クライアント: Websocket クライアント プログラムを提供し、Websocket 接続やデータ送信などをサポートします。
  3. 拡張コマンド ライン ツール: Websocket サーバーとクライアントのテストに使用できる、nc に似たコマンド ライン ツール swoole を提供します。
  4. ブロードキャストのサポート: Websocket ブロードキャスト機能をサポートし、複数の Websocket クライアント間でメッセージをブロードキャストできます。

次に、SwooleがWebsocketのブロードキャスト機能をどのようにサポートしているかを中心に紹介します。

Swoole の Websocket ブロードキャスト機能

Websocket ブロードキャスト機能を実装するには、まず Websocket サーバーを実装し、そのサーバーに複数の Websocket クライアントを接続する必要があります。次に、サーバーにブロードキャスト機能を実装して、サーバーに接続しているすべてのクライアントにメッセージを送信します。

次に、具体的な実装手順を見てみましょう。

  1. Websocket サーバーの実装

まず、Websocket サーバーを実装する必要があります。具体的な実装手順については、公式ドキュメントのサンプルコードを参照してください。

Websocket サーバーを実装するときは、次の点に注意する必要があります。

  1. クライアント接続をリッスンするときは、$flags を SWOOLE_WEBSOCKET に設定して、次の使用を示す必要があります。 Websocket プロトコル。
  2. クライアント メッセージを受信するときは、onMessage コールバック関数を使用し、対応する処理のメッセージ タイプを決定する必要があります。

サンプル コードは次のとおりです。

$server = new SwooleWebsocketServer("127.0.0.1", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$server->set([
    'ssl_cert_file' => '/your_server_path/ssl.crt',
    'ssl_key_file' => '/your_server_path/ssl.key',
]);

$server->on('open', function (SwooleWebSocketServer $server, $request) {
    echo "client {$request->fd} connected
";
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    echo "received message: {$frame->data}
";
    // 进行消息处理
});

$server->on('close', function (SwooleWebSocketServer $server, $fd) {
    echo "client {$fd} closed
";
});

$server->start();
  1. 複数の Websocket クライアントを接続する

次に、複数の Websocket クライアントを On に接続する必要があります。サーバー。具体的な実装手順については、公式ドキュメントのサンプル コードを参照することもできます。

サンプル コードは次のとおりです。

var ws = new WebSocket("ws://127.0.0.1:9501");

ws.onopen = function(event) {
    ws.send("Hello, Websocket!");
};

ws.onmessage = function(event) {
    console.log("received message: " + event.data);
};

ws.onclose = function(event) {
    console.log("connection closed");
};
  1. Websocket ブロードキャストの実装

最後に、サーバー側で Websocket ブロードキャスト機能を実装する必要があります。つまり、クライアントからサーバーへのすべての接続にメッセージを送信します。

具体的な実装手順は次のとおりです。

  1. サーバーに接続されているすべてのクライアントの $fd を保存します。
  2. メッセージを受信したら、保存されているすべてのクライアントの $fd にメッセージを送信します。

サンプル コードは次のとおりです。

$server = new SwooleWebsocketServer("127.0.0.1", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);

$clients = [];

$server->on('open', function (SwooleWebSocketServer $server, $request) use (&$clients) {
    echo "client {$request->fd} connected
";
    $clients[] = $request->fd;
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) use (&$clients) {
    echo "received message: {$frame->data}
";
    foreach ($clients as $client) {
        $server->push($client, $frame->data);
    }
});

$server->on('close', function (SwooleWebSocketServer $server, $fd) use (&$clients) {
    echo "client {$fd} closed
";
    $index = array_search($fd, $clients);
    if ($index !== false) {
        unset($clients[$index]);
    }
});

$server->start();

これまでのところ、Websocket 用の Swoole のブロードキャスト機能を正常に実装できました。以上の実装により、複数のWebSocketクライアント間でメッセージブロードキャスト機能を実装することができます。

概要

Websocket 通信プロトコルは非常に人気のあるリアルタイム通信プロトコルであり、高性能ネットワーク通信フレームワークである Swoole も Websocket を強力にサポートし始めています。この記事ではSwooleがWebsocketのブロードキャスト機能をどのようにサポートしているかを中心に紹介しますので、皆様のお役に立てれば幸いです。

以上がSwoole が Websocket のブロードキャスト機能をサポートする仕組みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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