Mysql
 sql >> Database >  >> RDS >> Mysql

Differenza tra un normale ajax e un lungo polling

Poiché la tua domanda iniziale era quale fosse la differenza tra le due tecniche, inizierò con questo:

Sondaggio AJAX

L'uso del polling AJAX per aggiornare una pagina significherà inviare una richiesta in un intervallo definito al server, che sarebbe simile a questo:

Il client invia una richiesta al server e il server risponde immediatamente.

Un semplice esempio (usando jQuery) sarebbe simile a questo:

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

Il problema è che questo causerà molte richieste inutili poiché non ci saranno sempre cose nuove su ogni richiesta.

Sondaggio lungo AJAX

L'uso del polling lungo AJAX significherà che il client invia una richiesta al server e il server attende che nuovi dati siano disponibili prima di rispondere. Questo sarebbe simile a questo:

Il client invia una richiesta e il server risponde "irregolarmente". Non appena il server risponde, il client invierà una nuova richiesta al server.

Il lato client sarebbe simile a questo:

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

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

Quello che farà è semplicemente caricare il getCurrentMoney.php ' nell'elemento money corrente e non appena c'è una richiamata, avvia una nuova richiesta.

Sul lato server di solito usi un loop. Per risolvere la tua domanda come saprà il server, quali sono le nuove pubblicazioni:o passi il timestamp della pubblicazione più recente al client disponibile sul server o usi l'ora del "lungo inizio del polling" come indicativo:

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

Qui non avremo richieste "inutili".