Eftersom din första fråga var vad skillnaden mellan de två teknikerna är, börjar jag med detta:
AJAX-undersökning
Att använda AJAX polling för att uppdatera en sida kommer att innebära att du skickar en begäran i ett definierat intervall till servern, som skulle se ut så här:
Klienten skickar en begäran till servern och servern svarar omedelbart.
Ett enkelt exempel (med jQuery) skulle se ut så här:
setInterval(function(){
$('#myCurrentMoney').load('getCurrentMoney.php');
}, 30000);
Problemet med detta är att detta kommer att orsaka många värdelösa förfrågningar eftersom det inte alltid kommer nya saker på varje förfrågan.
AJAX lång omröstning
Att använda AJAX lång polling kommer att innebära att klienten skickar en förfrågan till servern och servern väntar på att ny data ska bli tillgänglig innan han svarar. Det här skulle se ut så här:
Klienten skickar en begäran och servern svarar "oregelbundet". Så snart servern svarar kommer klienten att skicka en ny begäran till servern.
Klientsidan skulle se ut så här:
refresh = function() {
$('#myCurrentMoney').load('getCurrentMoney.php',function(){
refresh();
});
}
$(function(){
refresh();
});
Vad detta kommer att göra är att bara ladda getCurrentMoney.php
s utmatning till det aktuella pengaelementet och så snart det finns en återuppringning, starta en ny begäran.
På serversidan brukar man använda en loop. För att lösa din fråga hur servern kommer att veta, vilka är nya publikationer:antingen skickar du tidsstämpeln för den senaste till den klienttillgängliga publikationen till servern eller så använder du tiden för den "långa pollingstarten" som indikator:
<?
$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";
Här kommer vi inte ha "värdelösa" förfrågningar.