ホームページ >バックエンド開発 >PHPチュートリアル >PHP と WebSocket: リアルタイム データ転送のベスト プラクティス
近年、インターネットの急速な発展に伴い、リアルタイム通信の需要がますます高まっており、WebSocket の出現により、より洗練されたリアルタイム通信のソリューションが提供されます。時刻データ送信。 Web 開発では、PHP 言語も主流のバックエンド言語の 1 つとして位置を占めています。では、PHP と WebSocket を使用してリアルタイムのデータ送信を実現するにはどうすればよいでしょうか?
1. WebSocket とは
WebSocket は、HTTP/HTTPS プロトコルのポート 80 または 443 を介して通信する全二重通信プロトコルです。 WebSocket が接続を確立すると、クライアントとサーバーの両方が「リクエスト/レスポンス」モードを必要とせずに相互にメッセージを送信できるため、強力なリアルタイム パフォーマンス、双方向通信、低コストという利点があります。オーバーヘッドが少なく、リアルタイム チャット、オンライン ゲーム、および高速な対話が必要なその他のシナリオに適しています。
2. PHP での WebSocket の使用
Web 開発で一般的に使用される PHP フレームワークには、Laravel、CodeIgniter などが含まれます。ここではLaravelを例に、PHPとWebSocketを使ってリアルタイムのデータ送信を実現する方法を紹介します。
Ratchet は、WebSocket サーバーの実装に使用できる PHP 用の WebSocket ライブラリです。 Laravel プロジェクトでは、composer を通じてインストールできます。コマンドは次のとおりです:
$ composer require cboden/ratchet
app/Http/Controllers ディレクトリに WebSocket を作成します。 Laravel プロジェクト コントローラーの ChatController という名前。このコントローラは、Ratchet の MessageComponentInterface インターフェイスを継承し、以下に示すように、その onOpen、onMessage、onClose、および onError メソッドをオーバーライドします。
<?php namespace AppHttpControllers; use RatchetMessageComponentInterface; use RatchetConnectionInterface; class ChatController 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 ($from != $client) { $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(); } }
このコントローラでは、$clients はクライアント接続オブジェクトのコレクションであり、onOpen メソッドはコールバックを表します新しいクライアントが接続するときのコールバック メソッド、onMessage メソッドはクライアント メッセージを受信したときのコールバック メソッド、onClose メソッドはクライアントが切断されたときのコールバック メソッド、onError メソッドは接続エラーが発生したときのコールバック メソッドを表します。
Laravel プロジェクトの Routes/web.php ルーティング ファイルに次のコードを追加します。
use RatchetHttpHttpServer; use RatchetWebSocketWsServer; use AppHttpControllersChatController; Route::get('/chat', function () { $server = IoServer::factory( new HttpServer( new WsServer( new ChatController() ) ), 8080 ); $server->run(); });
このコードは、次のことを示しています。 WebSocket サービスはローカル ポート 8080 をリッスンし、サービスに対応するコントローラーは ChatController です。
フロントエンド ページでは、次に示すように、JavaScript コードを通じて WebSocket サービスへの接続を確立できます。 # コードは WebSocket とサーバー間の接続が確立されたことを示します。サーバーのメッセージを受信すると、コンソールに出力されます。メッセージを送信する場合は、send メソッドが呼び出されます。
テスト上記は、PHP と WebSocket を使用してリアルタイム データ送信を実現するコード例ですが、実際のニーズに応じてさらに詳細に開発し、リアルタイム性とアプリケーションのパフォーマンスを向上させることができます。
以上がPHP と WebSocket: リアルタイム データ転送のベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。