Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unterschied zwischen einem normalen Ajax und einem langen Abruf

Da Ihre anfängliche Frage war, was der Unterschied zwischen den beiden Techniken ist, fange ich damit an:

AJAX-Abfrage

Die Verwendung von AJAX-Polling zum Aktualisieren einer Seite bedeutet, dass Sie in einem definierten Intervall eine Anfrage an den Server senden, die so aussehen würde:

Der Client sendet eine Anfrage an den Server und der Server antwortet sofort.

Ein einfaches Beispiel (mit jQuery) würde so aussehen:

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

Das Problem dabei ist, dass dies viele nutzlose Anfragen verursacht, da es nicht immer neue Dinge bei jeder Anfrage geben wird.

AJAX-Langabfrage

Die Verwendung von AJAX Long Polling bedeutet, dass der Client eine Anfrage an den Server sendet und der Server wartet, bis neue Daten verfügbar sind, bevor er antwortet. Das würde so aussehen:

Der Client sendet eine Anfrage und der Server antwortet „unregelmäßig“. Sobald der Server antwortet, sendet der Client eine neue Anfrage an den Server.

Die Client-Seite würde so aussehen:

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

$(function(){
    refresh();
});

Was dies tun wird, ist einfach die getCurrentMoney.php zu laden 's Ausgabe in das aktuelle Geldelement und sobald es einen Rückruf gibt, starten Sie eine neue Anfrage.

Auf der Serverseite verwenden Sie normalerweise eine Schleife. Um Ihre Frage zu lösen, woher der Server weiß, welche neuen Veröffentlichungen vorliegen:Entweder Sie übergeben den Zeitstempel der neuesten für den Client verfügbaren Veröffentlichung an den Server oder Sie verwenden die Zeit des "langen Polling-Starts" als Indikator:

<?
$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";

Hier haben wir keine "nutzlosen" Anfragen.