ホームページ > バックエンド開発 > PHPチュートリアル > Web アプリケーションでのロングポーリングはどのように機能しますか?

Web アプリケーションでのロングポーリングはどのように機能しますか?

Susan Sarandon
リリース: 2024-12-28 15:09:17
オリジナル
225 人が閲覧しました

How Does Long Polling Work in Web Applications?

ロング ポーリングの理解と実装

ロング ポーリングは、サーバーが明示的なリクエストを待たずにクライアントにデータを送信できるようにするために Web アプリケーションで使用されるポーリング手法です。ロング ポーリングの実装には、クライアントとサーバー間の永続的な接続の確立が含まれます。

ロング ポーリング用の Apache 設定

ロング ポーリングのリクエストを処理するには、長いタイムアウトのリクエストを処理するように Apache を設定します。これは、Apache 構成で KeepAliveTimeout および MaxKeepAliveRequests ディレクティブを設定することで実現できます。

ロング ポーリング用の PHP スクリプト

ロング ポーリングを実装する単純な PHP スクリプトは、次のように記述できます。

<?php
while (true) {
    // Sleep for a random duration to simulate data availability
    sleep(rand(2, 10));

    // Generate a random string to represent new data
    $data = "Message: " . rand(1, 10);

    // Send the data to the client
    echo $data;
    flush();
}
?>
ログイン後にコピー

長い間JavaScriptポーリング

クライアント側では、JavaScript を使用して PHP スクリプトへの永続的な接続を確立し、受信データを処理できます。これは、次の jQuery コードを使用して実現できます。

$(function() {
    function waitForMsg() {
        $.ajax({
            url: "msgsrv.php",
            async: true,
            timeout: 50000,
            success: function(data) {
                // Append the received data to a DOM element
                $("#messages").append("<div>" + data + "</div>");

                // Recursively call the waitForMsg function to continue polling
                waitForMsg();
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                // Handle the error and try again after a delay
                waitForMsg();
            }
        });
    }
    waitForMsg();
});
ログイン後にコピー

この例では、デモ目的でロング ポーリングの基本的な実装を提供します。堅牢でスケーラブルな実装を実現するには、Node.js や Spring Boot などのフレームワークの使用を検討してください。

以上がWeb アプリケーションでのロングポーリングはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート