ホームページ >バックエンド開発 >PHPチュートリアル >PHP で WebSocket を使用するにはどうすればよいですか?
Web アプリケーションがより複雑になるにつれて、リアルタイム通信とデータ プッシュがより一般的になってきています。ここで WebSocket が登場します。 WebSocket は、サーバーとクライアントがリアルタイム通信とデータ プッシュのための双方向通信のための永続的な接続を確立できるようにするプロトコルです。この記事では、PHP で WebSocket を使用する方法について説明します。
WebSocket は、接続の確立後にサーバーとクライアントがリアルタイムで通信できるようにする、全二重の TCP ベースのプロトコルです。 HTTP 要求/応答モデルとは異なり、WebSocket 接続は接続が確立された後も常に開いたままになるため、複数の HTTP ハンドシェイクは必要ありません。
WebSocket は、テキスト、バイナリ、JSON、XML などの複数のデータ型をサポートするバイナリ プロトコルです。これにより、WebSocket はリアルタイム通信とデータ プッシュに最適になります。
PHP で WebSocket を使用するには、ライブラリを使用する必要があります。この記事では、Ratchet ライブラリを使用します。 Ratchet をインストールするには、Composer から次のコマンドを実行します。
composer require cboden/ratchet
インストールが完了したら、WebSocket アプリケーションを実装するコードの作成を開始できます。
次に、クライアントからメッセージを受信し、接続されているすべてのクライアントにメッセージを送信する WebSocket サービスを実装する簡単な例を示します。 ##
use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; use RatchetMessageComponentInterface; use RatchetConnectionInterface; class Chat implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New client connected: {$conn->resourceId} "; } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Client disconnected: {$conn->resourceId} "; } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } public function onError(ConnectionInterface $conn, Exception $e) { echo "Error: {$e->getMessage()} "; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); echo "Server started "; $server->run();上の例では、MessageComponentInterface インターフェイスを実装する Chat というクラスを定義しました。このクラスには、接続、切断、およびクライアントからのメッセージを処理するための特別なメソッドが含まれています。 onOpen(ConnectionInterface $conn): このメソッドは、クライアントがサーバーに接続するときに呼び出されます。ここでは、クライアント オブジェクトに接続を追加します。 onClose(ConnectionInterface $conn): このメソッドは、クライアントが接続を閉じるときに呼び出されます。ここでは、接続クライアント オブジェクトを削除します。 onMessage(ConnectionInterface $from, $msg): このメソッドは、クライアントがメッセージを送信するときに呼び出されます。ここでは、接続されている他のクライアントにメッセージを送信します。 onError(ConnectionInterface $conn, Exception $e): このメソッドは、エラーが発生したときに呼び出されます。ここで接続を閉じます。 上記の例では、IoServer クラスを介して HTTP サーバーも作成し、ポート 8080 をリッスンし、HttpServer を介して WebSocket サーバーにリクエストを渡し、WsServer を介して Chat クラスにリクエストを渡しました。
<!DOCTYPE html> <html> <head> <title>WebSocket client</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <input type="text" id="message" placeholder="Enter your message"> <button id="send">Send</button> <ul id="messages"></ul> <script> $(function () { var socket = new WebSocket('ws://localhost:8080'); socket.onopen = function() { console.log('Connection opened'); }; socket.onclose = function() { console.log('Connection closed'); }; socket.onmessage = function(event) { var data = JSON.parse(event.data); $('#messages').append($('<li>').text(data.message)); }; $('#send').click(function() { var message = $('#message').val(); socket.send(JSON.stringify({message: message})); }); }); </script> </body> </html>上記の例では、WebSocket オブジェクトを使用して新しい WebSocket 接続を作成します。接続がオープンまたはクローズされると、onopen イベントと onclose イベントがトリガーされます。 WebSocket がサーバーからメッセージを受信すると、onmessage イベントがトリガーされます。 jQuery ライブラリを使用して、[送信] ボタンのクリック イベントをリッスンし、クリックされると、テキスト入力ボックスの値をメッセージとしてサーバーに送信しました。
以上がPHP で WebSocket を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。