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".