Da dit første spørgsmål var, hvad forskellen mellem de to teknikker er, vil jeg starte med dette:
AJAX-afstemning
Brug af AJAX polling til at opdatere en side vil betyde, at du sender en anmodning i et defineret interval til serveren, som ville se sådan ud:
Klienten sender en anmodning til serveren og serveren svarer med det samme.
Et simpelt eksempel (ved hjælp af jQuery) ville se sådan ud:
setInterval(function(){
$('#myCurrentMoney').load('getCurrentMoney.php');
}, 30000);
Problemet med dette er, at dette vil forårsage en masse ubrugelige anmodninger, da der ikke altid vil være nye ting på hver anmodning.
AJAX lang afstemning
Brug af AJAX lang polling vil betyde, at klienten sender en anmodning til serveren, og serveren venter på, at nye data er tilgængelige, før han svarer. Dette ville se sådan ud:
Klienten sender en anmodning, og serveren svarer "uregelmæssigt". Så snart serveren svarer, sender klienten en ny anmodning til serveren.
Klientsiden ville se sådan ud:
refresh = function() {
$('#myCurrentMoney').load('getCurrentMoney.php',function(){
refresh();
});
}
$(function(){
refresh();
});
Hvad dette vil gøre er bare at indlæse getCurrentMoney.php
's output til det aktuelle pengeelement, og så snart der er et tilbagekald, start en ny anmodning.
På serversiden bruger man normalt en loop. For at løse dit spørgsmål, hvordan vil serveren vide, hvilke der er nye publikationer:enten sender du tidsstemplet for den nyeste til den tilgængelige klient publikation til serveren, eller du bruger tidspunktet for den "lange afstemningsstart" 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";
Her vil vi ikke have "ubrugelige" anmodninger.