sql >> Databáze >  >> RDS >> Mysql

Rozdíl mezi normálním ajaxem a dlouhým dotazováním

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.




  1. Řešení, které nemůže provést operaci DML uvnitř dotazu?

  2. index poklesu Oracle, pokud existuje

  3. Data jsou Null. Tuto metodu nebo vlastnost nelze volat na hodnoty null. (pomocí rozbalovacího seznamu)

  4. Jak vytvořit dynamické kontingenční tabulky v MySQL