Mysql
 sql >> Base de données >  >> RDS >> Mysql

Différence entre un ajax normal et une interrogation longue

Étant donné que votre question initiale était de savoir quelle est la différence entre les deux techniques, je vais commencer par ceci :

Sondage AJAX

L'utilisation de l'interrogation AJAX pour mettre à jour une page signifie que vous envoyez une requête dans un intervalle défini au serveur, qui ressemblera à ceci :

Le client envoie une requête au serveur et le serveur répond immédiatement.

Un exemple simple (utilisant jQuery) ressemblerait à ceci :

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

Le problème avec cela est que cela entraînera beaucoup de requêtes inutiles car il n'y aura pas toujours de nouvelles choses sur chaque requête.

Scrutation longue AJAX

L'utilisation de l'interrogation longue AJAX signifie que le client envoie une requête au serveur et que le serveur attend que de nouvelles données soient disponibles avant de répondre. Cela ressemblerait à ceci :

Le client envoie une requête et le serveur répond "irrégulièrement". Dès que le serveur répond, le client enverra une nouvelle requête au serveur.

Le côté client ressemblerait à ceci :

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

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

Cela va juste charger le getCurrentMoney.php dans l'élément monétaire actuel et dès qu'il y a un rappel, lancez une nouvelle requête.

Côté serveur, vous utilisez généralement une boucle. Pour résoudre votre question, comment le serveur saura quelles sont les nouvelles publications :soit vous transmettez l'horodatage de la publication disponible la plus récente au client au serveur, soit vous utilisez l'heure du "long polling start" comme indicateur :

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

Ici, nous n'aurons pas de requêtes "inutiles".