Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Diferença entre um ajax normal e uma sondagem longa


Como sua pergunta inicial era qual é a diferença entre as duas técnicas, vou começar com isso:

Pesquisa AJAX

Usar o polling AJAX para atualizar uma página significa que você envia uma solicitação em um intervalo definido para o servidor, que ficaria assim:



O cliente envia uma solicitação ao servidor e o servidor responde imediatamente.

Um exemplo simples (usando jQuery) ficaria assim:
setInterval(function(){
    $('#myCurrentMoney').load('getCurrentMoney.php');
}, 30000);

O problema com isso é que isso causará muitas solicitações inúteis, pois nem sempre haverá coisas novas em todas as solicitações.

Pesquisa longa AJAX

O uso do polling longo AJAX significa que o cliente envia uma solicitação ao servidor e o servidor espera que novos dados estejam disponíveis antes de responder. Isso ficaria assim:



O cliente envia um pedido e o servidor responde "irregularmente". Assim que o servidor responder, o cliente enviará uma nova solicitação ao servidor.

O lado do cliente ficaria assim:
refresh = function() {
    $('#myCurrentMoney').load('getCurrentMoney.php',function(){
        refresh();
    });
}

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

O que isso fará é apenas carregar o getCurrentMoney.php 's para o elemento money atual e assim que houver um retorno de chamada, inicie uma nova solicitação.

No lado do servidor, você geralmente usa um loop. Para resolver sua dúvida como o servidor vai saber, quais são as novas publicações:ou você passa o timestamp da publicação disponível mais recente para o cliente para o servidor ou você usa o horário do "long polling start" como indicador:
<?
$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";

Aqui não teremos pedidos "inúteis".