Web アプリケーションは現代のインターネットでますます人気があり、そのようなアプリケーションは豊かなユーザー エクスペリエンスと対話を提供できます。ただし、従来の HTTP 要求/応答モデルには、リアルタイムのパフォーマンスと効率において一定の制限があります。この問題を解決するために、WebSocket が登場しました。 WebSocket は、クライアントとサーバー間のリアルタイム通信を可能にする全二重通信プロトコルです。この記事では、PHP と WebSocket を使用してリアルタイム Web アプリケーションを作成する方法について説明します。
WebSocket は、同じ TCP 接続上で双方向通信を可能にする TCP ベースの全二重通信プロトコルです。従来の HTTP プロトコルでは、クライアントとサーバー間の一方向の要求/応答通信のみが可能です。 WebSocket プロトコルを使用すると、接続が確立された後、クライアントとサーバーはリクエストを待たずにいつでもデータを送信できます。このリアルタイム性と効率性により、WebSocket プロトコルはリアルタイム Web アプリケーションの開発に適しています。
リアルタイム Web アプリケーションでは、より良いユーザー サービスを提供するために、ユーザーの操作とデータの更新をタイムリーにユーザーにフィードバックする必要があります。経験。従来の HTTP 要求/応答モデルにはある程度の遅延があり、リアルタイム通信のニーズを満たすことができません。さらに、HTTP リクエスト/レスポンス モデルではサーバーに高い負荷がかかり、リクエストごとに新しい接続が必要となるため、通信のオーバーヘッドが増加します。したがって、WebSocket を使用すると、リアルタイム パフォーマンスが向上し、サーバーの負荷が軽減されます。
PHP では、Ratchet ライブラリを利用して WebSocket サーバーを簡単に作成できます。 Ratchet は PHP 用の WebSocket ライブラリで、WebSocket プロトコルの実装を提供し、WebSocket サーバーとクライアントを簡単に作成できるため、リアルタイム Web アプリケーションの開発に便利です。以下は、Ratchet を使用して WebSocket サーバーを作成する手順です。
ステップ 1: Ratchet ライブラリをインストールする
Composer ツールを使用して Ratchet ライブラリをインストールできます。ターミナルで次のコマンドを実行します。
composer require cboden/ratchet
ステップ 2: サーバー クラスを作成する
サーバー クラスでは、onOpen と onMessage の 2 つのメソッドをオーバーライドする必要があります。 onOpen メソッドは接続の確立時に呼び出され、onMessage メソッドはメッセージの受信時に呼び出されます。以下は、単純なサーバー クラスの例です。
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 connection! ({$conn->resourceId}) "; } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection {$conn->resourceId} has disconnected "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: {$e->getMessage()} "; $conn->close(); } }
上の例では、MessageComponentInterface インターフェイスを実装する Chat という名前のクラスを定義しました。コンストラクターでは、接続リスト $clients を初期化して、接続されているすべてのクライアントを記録します。 onOpen メソッドでは、新しい接続を接続リストに追加し、接続のリソース ID を記録します。 onMessage メソッドでは、すべての接続をループし、受信したメッセージを送信者を除くすべてのクライアントに送信します。 onClose メソッドと onError メソッドは、接続の終了やエラー状況を処理するために使用されます。
ステップ 3: サーバーを実行する
サーバーを実行する前に、ターミナルで WebSocket サーバーを起動する必要があります。プロジェクト ディレクトリに起動スクリプトを作成して、サーバーを起動できます。起動スクリプトでは、WebSocket サーバー オブジェクトを作成し、サーバー クラスのインスタンスを WebSocket サーバー オブジェクトに渡す必要があります。以下は起動スクリプトの例です:
use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; require dirname(__DIR__) . '/vendor/autoload.php'; $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); $server->run();
上の例では、ポート 8080 で待機する WebSocket サーバー オブジェクト $server を作成しました。 HttpServer と WsServer は、HTTP リクエストと WebSocket 接続を処理する Ratchet ライブラリ内の 2 つのコンポーネントです。 WebSocket 接続が確立された後に関連イベントを処理するために、Chat クラスのインスタンスを WsServer に渡します。最後に、$server->run() メソッドを呼び出して WebSocket サーバーを起動します。
PHP を使用して WebSocket サーバーを作成したら、リアルタイム Web アプリケーションの開発を開始できます。 WebSocket サーバーは、接続されているすべてのクライアントを記録し、クライアントからメッセージを受信すると、そのメッセージをすべてのクライアントにブロードキャストできます。 JavaScript を使用して、クライアント側でコードを記述し、WebSocket 接続を確立し、データを送受信できます。
以下は、jQuery を使用して WebSocket 接続を確立するためのサンプル コードです:
let websocket = new WebSocket('ws://localhost:8080'); websocket.onmessage = function(event) { console.log(event.data); } $('form').submit(function(event) { event.preventDefault(); let message = $('input').val(); $('input').val(''); websocket.send(message); });
上の例では、WebSocket コンストラクターを使用して WebSocket 接続を確立し、接続アドレスは ws です。 ://ローカルホスト:8080。 onmessage 関数では、WebSocket メッセージ イベントをリッスンし、受信後にメッセージをコンソールに出力します。フォーム送信イベントでは、入力ボックス内のテキストを取得し、WebSocket サーバーに送信します。
WebSocket はリアルタイム通信を実現できるプロトコルであり、高効率、リアルタイム性という特徴を持っています。 PHP では、Ratchet ライブラリを利用して WebSocket サーバーを簡単に作成できるため、リアルタイム Web アプリケーションの開発がよりシンプルかつ効率的になります。将来的には、WebSocket プロトコルはリアルタイム Web アプリケーション開発の重要な部分になるでしょう。
以上がPHP で WebSocket を使用してリアルタイム Web アプリケーションを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。