PHP を使用してネットワーク アプリケーションを開発する場合、多くの場合、サーバーとのリアルタイム通信と対話を実現するために長いリンクを使用する必要があります。この記事では、PHP を使用して長いリンクを実装する方法を紹介します。
永続接続とも呼ばれる長い接続は、クライアントとサーバーの間に確立された接続を指し、一度確立されると、クライアントまたはサーバーが切断されるまで開いたままになります。このようにして、クライアントはこの接続を通じていつでもリクエストやデータをサーバーに送信でき、サーバーはいつでもデータやイベントをクライアントにプッシュすることもできます。
長い接続の主な利点は、同時接続を処理する能力が強化され、サーバーの負担が軽減され、アプリケーションのパフォーマンスと応答速度が向上することです。第 2 に、長い接続も実装できます。リアルタイム通信およびプッシュタスクでの遅延の低減とリアルタイムパフォーマンス。
以下は、単純な長いリンクの実装の例です:
// 客户端代码 $socket = fsockopen("127.0.0.1", 8888, $errno, $errstr, 30); if (!$socket) { echo "$errstr ($errno)\n"; } else { fwrite($socket, "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: Keep-Alive\r\n\r\n"); while (!feof($socket)) { echo fgets($socket, 128); } fclose($socket); }
// 服务器端代码 $server = stream_socket_server("tcp://0.0.0.0:8888", $errno, $errstr); if (!$server) { echo "$errstr ($errno)\n"; } else { while (true) { $client = stream_socket_accept($server); if ($client) { while ($data = fread($client, 4096)) { // 处理接收到的数据或请求事件 echo $data; } fclose($client); } } fclose($server); }
クライアント コードでは、まず fsockopen 関数を使用してサーバーに接続し、HTTP GET リクエストを送信して、接続ステータス (接続: Keep-Alive) を確認し、終了シンボル (feof) が読み込まれるか、サーバーが接続を閉じるまで、while ループを通じてサーバーから受信したデータを継続的に読み取って出力します。サーバー側のコードでは、まず stream_socket_server 関数を使用してポート 8888 にバインドされた TCP サーバーを作成し、次に stream_socket_accept 関数を使用してクライアントのリクエストを受け入れ、クライアントから送信されたデータを while ループを通じて継続的に読み取り、データまたはリクエストイベントを受信し、再度クライアントのリクエストを待ちます。
実際のアプリケーションでは、通常、これら 2 つの関数を直接使用して長いリンクを実装することはありませんが、制御と管理を改善するために、コード レベルで特定のカプセル化と処理を実行する必要があることに注意してください。長いリンクの接続ステータスとデータ送信。さらに、Swoole、Workerman など、PHP にはオープンソースのフレームワークやコンポーネントがいくつかあり、長いリンクや高い同時処理の機能を簡単に実装でき、開発効率が向上するだけでなく、パフォーマンスと安定性も最適化されます。 。
つまり、長いリンクには Web 開発における幅広いアプリケーション シナリオがあり、これによりアプリケーションのパフォーマンスとリアルタイム性が向上します。リアルタイムの対話、プッシュ、通知などを必要とするアプリケーション シナリオの場合タスク、長いリンクは非常に効果的な解決策になります。
以上がPHP を使用して長いリンクを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。