Protože vaše počáteční otázka byla, jaký je rozdíl mezi těmito dvěma technikami, začnu tímto:
Dotazování AJAX
Použití dotazování AJAX k aktualizaci stránky bude znamenat, že pošlete požadavek v definovaném intervalu na server, který bude vypadat takto:
Klient odešle požadavek na server a server okamžitě odpoví.
Jednoduchý příklad (s použitím jQuery) by vypadal takto:
setInterval(function(){
$('#myCurrentMoney').load('getCurrentMoney.php');
}, 30000);
Problém je v tom, že to způsobí spoustu zbytečných požadavků, protože na každém požadavku nebudou vždy nové věci.
AJAX long polling
Použití AJAX long polling bude znamenat, že klient odešle požadavek na server a server čeká, až budou dostupná nová data, než odpoví. To by vypadalo takto:
Klient odešle požadavek a server odpoví „nepravidelně“. Jakmile server odpoví, klient odešle serveru nový požadavek.
Klientská strana by vypadala takto:
refresh = function() {
$('#myCurrentMoney').load('getCurrentMoney.php',function(){
refresh();
});
}
$(function(){
refresh();
});
To udělá jen načtení getCurrentMoney.php
's výstupem do aktuálního peněžního prvku a jakmile dojde ke zpětnému volání, spusťte nový požadavek.
Na straně serveru obvykle používáte smyčku. Chcete-li vyřešit vaši otázku, jak se server dozví, které nové publikace jsou:buď předáte serveru časové razítko nejnovější dostupné publikace klientovi, nebo jako indikátor použijete čas „dlouhého začátku dotazování“:
<?
$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";
Zde nebudeme mít "zbytečné" požadavky.