従来のWebアプリケーションでは、通常、短い接続が通信に使用されます。クライアントがサーバーにリクエストを送信するたびに、サーバーはリクエストを処理し、応答を返し、すぐに切断します。ただし、リアルタイムチャット、プッシュメッセージなどの特定のアプリケーションシナリオでは、長い接続がリアルタイムでインタラクティブなエクスペリエンスを向上させることができます。この記事では、特定のコードの例を使用して、PHPで効率的な長い接続通信を実現する方法を紹介します。
PHPで長い接続通信を実装するには、2つの主な一般的なテクノロジーがあります。ポーリングとWebSockingです。
ポーリングは、シンプルな長い接続通信テクノロジーです。その基本的な原則は、クライアントが常にサーバーにリクエストを送信することです。リクエストを受信した後、サーバーはクライアントにプッシュする必要がある新しいデータがあるかどうかを確認します。ある場合は、すぐにデータを返します。そうでない場合は、新しいデータが利用可能になるまで接続を維持します。ポーリングの欠点は、多数の無効な要求を生成できることです。これにより、サーバーの負担が増加します。
簡単なポーリングサンプルコードは次のとおりです。
<?php // サーバー側 $data = "Hello, World!"; // プッシュするデータ while (true) { $newData = checkNewData(); // 新しいデータを確認してください if ($newData) { echo $newData; flush(); // すぐに応答を送信します break; } usleep(1000); // 寝る1ミリ秒,避けるCPU占有が高すぎる } // クライアント set_time_limit(0); // タイムアウト制限をキャンセルします while (true) { $response = sendRequest(); // リクエストを送信します if ($response) { echo $response; } usleep(1000); // 寝る1ミリ秒 } ?>
WebSocketは、フルダップレックス通信をサポートする、より効率的で強力な長年の通信プロトコルであり、クライアントとサーバーがリクエストを待たずに互いにメッセージを送信できるようにします。これにより、WebSocketは、オンラインゲーム、リアルタイムチャット、ストックプッシュなど、リアルタイムの要件が高いアプリケーションシナリオに非常に適しています。
これが単純なWebSocketサンプルコードです:
<?php // サーバー側 $server = new WebSocketServer("localhost", 8000); // 作成するWebSocketサーバーオブジェクト while (true) { $client = $server->によるけ入力れる(); //クライアント接続をによるけ入力れます(true){ $ message = $ client-> receive(); //クライアントメッセージをによる信する場合($ message){ //クライアントメッセージを処理する// $ data = processMessage($ message); //処理されたデータをクライアントにプッシュする// $ client-> send($ data); } } $ client-> close(); //クライアント接続を近いじる} //クライアント$ socket = new WebSocketClient( "ws:// localhost:8000"); //(true)while while websocketクライアントオブジェクトを作成します{ $ message = $ socket-> receive(); //サーバーメッセージのによる信if($ message){ //サーバーメッセージを処理する// $ data = processMessage($ message); //処理されたデータをユーザーに急行する// echo $ data; } //サーバーにメッセージを送信する// $ socket-> send($ message); } ?>
この記事では、PHPで長い接続通信を実装する2つの一般的な方法、ポーリングとWebSocketについて説明します。各方法には利点と短所があり、適切なソリューションを選択するには、特定のアプリケーションのニーズに基づいてトレードオフが必要です。うまくいけば、これらのサンプルコードを通じて、リアルタイムのデータ相互作用を実現するために、長期接続された通信テクノロジーをよりよく理解し、適用できることを願っています。