インターネットとモバイル通信技術の急速な発展に伴い、リアルタイム通信がますます注目を集めています。リアルタイム通信は、ユーザー間のインスタント メッセージング、オンライン音声通話やビデオ通話、ゲーム対戦などの機能を実現し、インターネット アプリケーションにさらなる可能性をもたらします。
この記事では、PHP と Swoole を使ってリアルタイム通信を実現する方法を紹介し、簡単な WebSocket アプリケーションから始めて、Socket プログラミングの基礎知識と Swoole の応用実践を段階的に紹介します。この記事を読むには、PHP の基礎とネットワーク プログラミングに関する基本的な知識が必要です。
1. WebSocket の基本
WebSocket は、HTTP プロトコルをベースとした双方向通信プロトコルであり、「ハンドシェイク」と呼ばれるプロトコルを使用して双方向通信を実現します。 WebSocket 接続の利点は、オーバーヘッドが非常に小さく、リアルタイム通信が非常に優れており、クライアントとサーバーの間で双方向のリアルタイム通信を確立できることです。
WebSocket の確立には、次の手順が必要です:
1. ブラウザは、サーバーへの WebSocket ハンドシェイク要求を開始します。要求ヘッダーには、アップグレード、接続、秒などのいくつかのキー フィールドが含まれています。 WebSocket - キーなど
2. サーバーはクライアントの WebSocket リクエストを処理し、仕様を満たしている場合は、応答ヘッダーに Upgrade、Connection、Sec-WebSocket-Accept などのフィールドを含む応答メッセージを返します。
3. クライアントはサーバーから応答メッセージを受信し、Sec-WebSocket-Accept フィールドをチェックして、WebSocket ハンドシェイクが正常に確立されたことを確認します。
4. 双方ともデータ通信を開始でき、テキスト、バイナリ、ピン、ポンなどのメッセージを送信できます。
PHP で WebSocket を使用すると、Swoole が提供する WebSocket サービスを通じて実装できます。 Swooleの基本的な使い方を紹介します。
2. Swoole の基本
1. Swoole のインストール
Swoole の使用を開始する前に、サーバーに Swoole 拡張機能をインストールする必要があります。次のコマンドを使用してインストールできます:
pecl install swoole
またはソース コードからインストールできます:
$ wget https://github.com/swoole/ swoole-src/archive /v4.3.3.tar.gz
$ tar zxvf v4.3.3.tar.gz
$ cd swoole-src-4.3.3
$ phpize
$ ./configure
$ make && make install --with-swoole
クライアントが確立したときにポート 9501 をリッスンする単純な WebSocket サービスを実装しましょう。サーバーとの接続時に、クライアントに hello メッセージを送信します。
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "new client connected "; $server->push($request->fd, "hello"); }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "received message: {$frame->data} "; }); $server->start();
このコードでは、新しい WebSocket サーバーを作成し、ポート 9501 でリッスンします。クライアントがサーバーとの接続を確立すると、open イベントがトリガーされ、Hello メッセージがクライアントに送信されます。クライアントがサーバーにメッセージを送信すると、メッセージ イベントがトリガーされ、クライアントから送信された情報をエコーを通じて出力できます。
上記のコードを開始した後、ブラウザまたは WebSocket クライアントを使用してサーバーに接続できます:
let ws = new WebSocket('ws://127.0.0.1:9501'); ws.onopen = function(event) { console.log('WebSocket connected'); }; ws.onmessage = function(event) { console.log('Received:', event.data); }; ws.send('Hello, Server');
クライアントが正常に接続すると、コンソールに次の情報が出力されます:
WebSocket connected Received: hello
クライアントがサーバーから送信された hello メッセージを正常に受信したことを示します。
3. リアルタイム チャット アプリケーションを実装する
次に、複数のユーザーがチャット ルームでリアルタイムにコミュニケーションできるようにするリアルタイム チャット アプリケーションを実装しましょう。このため、チャット ルームの基本機能を実装するには、上記の WebSocket サーバーを拡張し続ける必要があります。
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501); $server->set([ 'worker_num' => 2, //启动2个Worker进程 ]); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "new client connected "; foreach($server->connections as $fd) { $server->push($fd, "{$request->fd} joined the room"); } }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { foreach($server->connections as $fd) { if ($fd != $frame->fd) { $server->push($fd, "user {$frame->fd}: {$frame->data}"); } } }); $server->on('close', function ($server, $fd) { echo "client {$fd} closed "; foreach($server->connections as $fds) { $server->push($fds, "{$fd} quited the room"); } }); $server->start();
上記のコードでは、open イベントと close イベントの処理を追加しました。ユーザーが接続するか接続を閉じると、チャット ルームに参加するかチャット ルームから退出するためのメッセージが接続されている他のユーザーに送信されます。ユーザーがチャット ルームでメッセージを送信すると、そのメッセージは他のオンライン ユーザーにブロードキャストされます。
上記のコードを開始した後、複数のブラウザ ウィンドウを使用してサーバーに個別に接続し、同じチャット ルームに入ることができます。ユーザーがメッセージを送信すると、他のユーザーはリアルタイムでメッセージを受信できます。
この記事では、PHP と Swoole を使用して、基本的な WebSocket アプリケーションからリアルタイム チャット ルーム アプリケーションまで、リアルタイム コミュニケーションを実現する方法を紹介します。 Swoole は、より柔軟な非同期プログラミング手法を提供し、高性能、高同時実行性、低遅延のアプリケーションを簡単に作成できるようにします。
以上がPHP と Swoole を使用したリアルタイム通信の実装に関する完全なチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。