WebSocket は、最新の Web アプリケーションで一般的に使用されるリアルタイム通信プロトコルになりました。 PHP を使用して WebSocket サーバーを開発するには、通常、Swoole などの拡張機能を使用する必要があります。これは、Swoole が非同期プログラミング、プロセス管理、メモリ マッピング、およびその他の WebSocket 関連機能をサポートするためです。この記事では、Swoole を使用して WebSocket サーバーとクライアントの対話を実装する方法について説明し、いくつかの具体的なコード例を示します。
Swoole は、WebSocket サーバーの実装に優れたサポートを提供する優れた PHP 拡張機能です。 Swoole は、非同期プログラミング、マルチプロセスおよびマルチスレッドの同時アクセスをサポートしています。サーバーのライフサイクルを管理し、メモリ マッピングなどのその他の便利な機能を提供します。 WebSocket は、最新の Web アプリケーションでよく使用されるリアルタイム通信プロトコルであり、Swoole を使用して WebSocket サーバーを開発すると、クライアントとのリアルタイム通信を簡単に実装できます。
まず、Swoole 拡張機能をインストールする必要があります。これは、次のコマンドでインストールできます。
pecl install swoole
インストール後、次のコマンドを追加する必要があります。 php.ini ファイルに次の設定を追加します。
extension=swoole
上記の操作を完了すると、PHP で Swoole 拡張機能を使用できるようになります。
次に、ネットワーク ツールを使用するか、Chrome ブラウザのプラグイン「Simple WebSocket Client」をインストールして、WebSocket クライアントをローカルに構築する必要があります。
このプロセスでは、まず Swoole WebSocket サーバー インスタンスを作成し、リスニング ポートと IP アドレスの設定などの基本的な構成を実行する必要があります。 WebSocket サーバーは、WebSocket サーバーからのさまざまなイベントやデータを処理する必要もあります。以下は簡単な例です:
$server = new SwooleWebsocketServer("0.0.0.0", 9501); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "connection open: {$request->fd} "; }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "received message: {$frame->data} "; $server->push($frame->fd, json_encode(["hello", "world"])); }); $server->on('close', function (SwooleWebSocketServer $server, $fd) { echo "connection close: {$fd} "; }); $server->start();
上記のコードでは、WebSocket サーバー インスタンスは new キーワードを使用して作成されます。そのコンストラクターは IP アドレスとポート番号を渡す必要があり、Swoole はこのポートで WebSocket 接続を待機します。次に、WebSocket サーバーのオープン、メッセージ、クローズ イベントは、いくつかのコールバック関数を通じて処理されます。最後に、 $server->start() メソッドを呼び出して、WebSocket サーバーを開始します。
WebSocket サーバー インスタンスを作成した後、イベント コールバックを再バインドすることですべてのユーザー イベントを処理できます。たとえば、「open」コールバック関数を再バインドすることで、サーバーへの WebSocket クライアント接続のオープン イベントを処理できます。
WebSocket クライアントとサーバーが対話するには 2 つの方法があります。サーバーがデータをクライアントにプッシュする方法と、クライアントが WebSocket サーバーにデータを送信する方法です。
サーバーは $server->push() メソッドを使用して、特定のクライアントまたはすべてのクライアントにデータをプッシュできます。簡単な例を次に示します。
$server->push($frame->fd, json_encode(["hello", "world"]));
上記のコードでは、$frame->fd はクライアントの一意の識別子です。 WebSocket 接続は、サーバーに対して開かれた TCP 接続と考えることができ、クライアントは一意の識別子 ($frame->fd) によって識別されます。
クライアントは、JavaScript で記述された WebSocket API を使用してサーバーにデータを送信できます。以下は、WebSocket サーバーにデータを送信する方法を示す簡単な JavaScript コード スニペットです。
const socket = new WebSocket('ws://localhost:9501'); socket.addEventListener('open', function (event) { socket.send('Hello World!'); // 发送数据 });
クライアントとサーバー間の通信はイベントベースであるため、受信したデータはイベント ハンドラーを通じて処理する必要があります。コールバック関数は、受信したデータの処理を担当する「message」WebSocket イベントにバインドする必要があります。以下は簡単な例です:
$server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "received message: {$frame->data} "; });
以下は完全な Swoole WebSocket サーバーの例であり、Swoole を使用して WebSocket サーバーを確立し、クライアントと対話する方法を示しています。
ログイン後にコピー
この WebSocket サーバーは、ポート 9501 で WebSocket 接続をリッスンして処理します。任意の WebSocket クライアントを使用して、このサーバー インスタンスをテストおよび調査できます。
以上がSwoole を使用して WebSocket サーバーとクライアントの対話を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。