ホームページ >バックエンド開発 >PHPチュートリアル >PHPで長時間接続通信を実装するにはどうすればよいですか?

PHPで長時間接続通信を実装するにはどうすればよいですか?

王林
王林オリジナル
2023-08-26 16:04:441813ブラウズ

PHPで長時間接続通信を実装するにはどうすればよいですか?

PHP で長時間接続通信を実装するにはどうすればよいですか?

従来の Web アプリケーションでは、通常、通信に短い接続が使用されます。クライアントがサーバーにリクエストを送信すると、サーバーはリクエストを処理して応答を返し、すぐに切断します。リアルタイム チャット、プッシュ メッセージなどの一部の特定のアプリケーション シナリオでは、リアルタイム データ インタラクションのために長時間の接続を実装する必要があります。この記事では、PHPで長時間接続通信を実装する方法をコード例を交えて紹介します。

PHP で長い接続を実装するには、ポーリングと WebSocket という 2 つの一般的なテクノロジを使用できます。

  1. ポーリング
    ポーリングは、単純な長時間接続の通信テクノロジです。基本原理は、クライアントがサーバーにリクエストを継続的に送信することです。サーバーはリクエストを受信した後、クライアントにプッシュする新しいデータがあるかどうかを確認します。ある場合はすぐにデータを返し、ない場合はデータを返します。新しいデータが利用可能になるまで返されません。クライアントはサーバーから返されたデータを受信した後、リクエストの送信を続けます。この方法の欠点は、無効なリクエストが大量に生成され、サーバーの負荷が増大することです。

以下は、単純なポーリングのサンプル コードです。

<?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毫秒
}
  1. WebSocket
    WebSocket は、より効率的で強力な長時間接続通信プロトコルです。これにより全二重通信が可能になり、サーバーとクライアントがリクエストを待たずに積極的にメッセージを相互に送信できるようになります。ポーリングと比較して、無効なリクエストの数が減り、高いリアルタイム要件を持つアプリケーション シナリオにより適しています。

以下は簡単な WebSocket サンプル コードです:

<?php
// 服务器端
$server = new WebSocketServer("localhost", 8000); // 创建WebSocket服务器对象

while (true) {
    $client = $server->accept(); // 接受客户端连接

    while (true) {
        $message = $client->receive(); // 接收客户端消息

        if ($message) {
            // 处理客户端消息
            // $data = processMessage($message);

            // 将处理后的数据推送给客户端
            // $client->send($data);
        }
    }

    $client->close(); // 关闭客户端连接
}

// 客户端
$socket = new WebSocketClient("ws://localhost:8000"); // 创建WebSocket客户端对象

while (true) {
    $message = $socket->receive(); // 接收服务器消息

    if ($message) {
        // 处理服务器消息
        // $data = processMessage($message);

        // 将处理后的数据展示给用户
        // echo $data;
    }

    // 发送消息给服务器
    // $socket->send($message);
}

上記は、PHP で長時間接続通信を実装する方法の簡単な紹介とサンプル コードです。より複雑な長時間接続通信を実現するには、より多くのテクノロジーとツールが必要になる場合があります。この記事が、長時間接続通信の理解と使用に役立つことを願っています。

以上がPHPで長時間接続通信を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。