検索
ホームページPHPフレームワークSwooleSwoole を使用して WebSocket サーバーとクライアントの対話を実装する方法

Swoole を使用して WebSocket サーバーとクライアントの対話を実装する方法

WebSocket は、最新の Web アプリケーションで一般的に使用されるリアルタイム通信プロトコルになりました。 PHP を使用して WebSocket サーバーを開発するには、通常、Swoole などの拡張機能を使用する必要があります。これは、Swoole が非同期プログラミング、プロセス管理、メモリ マッピング、およびその他の WebSocket 関連機能をサポートするためです。この記事では、Swoole を使用して WebSocket サーバーとクライアントの対話を実装する方法について説明し、いくつかの具体的なコード例を示します。

Swoole と WebSocket

Swoole は、WebSocket サーバーの実装に優れたサポートを提供する優れた PHP 拡張機能です。 Swoole は、非同期プログラミング、マルチプロセスおよびマルチスレッドの同時アクセスをサポートしています。サーバーのライフサイクルを管理し、メモリ マッピングなどのその他の便利な機能を提供します。 WebSocket は、最新の Web アプリケーションでよく使用されるリアルタイム通信プロトコルであり、Swoole を使用して WebSocket サーバーを開発すると、クライアントとのリアルタイム通信を簡単に実装できます。

ステップ 1: プロジェクト環境の準備

まず、Swoole 拡張機能をインストールする必要があります。これは、次のコマンドでインストールできます。

pecl install swoole

インストール後、次のコマンドを追加する必要があります。 php.ini ファイルに次の設定を追加します。

extension=swoole

上記の操作を完了すると、PHP で Swoole 拡張機能を使用できるようになります。

次に、ネットワーク ツールを使用するか、Chrome ブラウザのプラグイン「Simple WebSocket Client」をインストールして、WebSocket クライアントをローカルに構築する必要があります。

ステップ 2: 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 クライアント接続のオープン イベントを処理できます。

ステップ 3: データ対話

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール