sql >> データベース >  >> RDS >> Mysql

通常のajaxと長いポーリングの違い

    最初の質問は2つの手法の違いでしたので、これから始めます:

    AJAXポーリング

    AJAXポーリングを使用してページを更新するということは、定義された間隔でサーバーにリクエストを送信することを意味します。これは次のようになります。

    クライアントはサーバーにリクエストを送信し、サーバーはすぐに応答します。

    簡単な例(jQueryを使用)は次のようになります:

    setInterval(function(){
        $('#myCurrentMoney').load('getCurrentMoney.php');
    }, 30000);
    

    これに伴う問題は、すべてのリクエストに常に新しいものがあるとは限らないため、これにより多くの役に立たないリクエストが発生することです。

    AJAXロングポーリング

    AJAXロングポーリングを使用するということは、クライアントがサーバーにリクエストを送信し、サーバーが応答する前に新しいデータが利用可能になるのを待つことを意味します。これは次のようになります:

    クライアントはリクエストを送信し、サーバーは「不規則に」応答します。サーバーが応答するとすぐに、クライアントはサーバーに新しいリクエストを送信します。

    クライアント側は次のようになります:

    refresh = function() {
        $('#myCurrentMoney').load('getCurrentMoney.php',function(){
            refresh();
        });
    }
    
    $(function(){
        refresh();
    });
    

    これにより、getCurrentMoney.phpをロードするだけです。 の出力を現在のmoney要素に入れ、コールバックが発生するとすぐに、新しいリクエストを開始します。

    サーバー側では、通常、ループを使用します。サーバーが新しいパブリケーションをどのように認識するかという質問を解決するには、クライアントが利用できる最新のパブリケーションのタイムスタンプをサーバーに渡すか、「長いポーリング開始」の時間を指標として使用します。

    <?
    $time = time();
    
    while ($newestPost <= $time) {
        // note that this will not count as execution time on linux and you won't run into the 30 seconds timeout - if you wan't to be save you can use a for loop instead of the while
        sleep(10000);
        // getLatestPostTimestamp() should do a SELECT in your DB and get the timestamp of the latest post
        $newestPost = getLatestPostTimestamp();
    }
    
    // output whatever you wan't to give back to the client
    echo "There are new posts available";
    

    ここでは、「役に立たない」リクエストはありません。




    1. データベースをアップグレードするときに楽しむ5つの利点

    2. SQL Server(T-SQL)で「date」を「datetime」に変換する例

    3. Oracleで1か月の日数を取得する2つの方法

    4. MySQL:アッパーキャメルケース(パスカルケース)でテーブルに名前を付けることはできません