2011-01-08 2 views
0

Ich bin neu in der Programmierung von Comet. Ich suchte durch und schreiben Sie den Code wie dieserBenötigen Sie eine Erklärung des Kometenprogramms

<script type="text/javascript" charset="utf-8">   

     function waitForMsg(){     
      $.ajax({ 
       type: "GET", 
       url: "getMessage.php", 
       async: true, 
       cache: false, 
       timeout:50000, 
       success: function(data){       
        $('#messages).append(data); 
        setTimeout(
        'waitForMsg()', 
        1000 
       ); 
       }, 
       error: function(XMLHttpRequest, textStatus, errorThrown){ 
        addmsg("error", textStatus + " (" + errorThrown + ")"); 
        setTimeout(
        'waitForMsg()', 
        "15000"); 
       }, 
      }); 
     }; 

     $(document).ready(function(){     
      waitForMsg();    

     }); 
    </script> 

ich Update von getMessage.php bin immer wann immer ich eine Nachricht an getMessage.php bin vorbei

Aber meine Zweifel wird verwendet, i

setTimeout('waitForMsg()',1000); 

Was das bedeutet. Wenn wir waitForMsg() für jede 1 Sekunde anrufen, was ist dann der Unterschied zwischen Ajax und Comet Programmierung.

Antwort

0

Es gibt verschiedene Arten von COMET. Sie verwenden AJAX polling, aber es gibt andere Techniken, wie zum Beispiel forever-frame, bei denen kein Polling erforderlich ist.

Forever-frame verwendet einen versteckten unendlich langen iframe, den der Server script Tags nach Bedarf schiebt.

Beachten Sie auch, dass einige Verwendungen von AJAX-Abfragen (z. B. wie von der Wikipedia erläutert) keine setTimeout enthalten, da sie sofort eine neue AJAX-Anforderung im Erfolgshandler starten.

auch (mit AJAX Polling Beispiel), können Sie einfach verwenden:

setTimeout(waitForMsg, 1000); 

Es besteht keine Notwendigkeit für eine Zeichenfolge ist.

+0

Was ist das Problem mit Ajax-Abfragen? –

+0

Verschiedene Techniken haben verschiedene Vorteile. Einer der Vorteile von Avery-Frame-über-AJAX-Abfragen ist, dass es eine bessere Cross-Browser-Kompatibilität bietet. Es bedeutet auch, dass nur eine Verbindung unbegrenzt offengehalten wird. Mit AJAX-Abfragen * ist jede * Abfrage möglicherweise eine lang andauernde Anfrage. –

1

In Bezug auf Ihr Beispiel hängt der Unterschied zwischen Ajax und Comet davon ab, wie getMessage.php auf die Anfrage des Clients reagiert.

Mit Ajax würde getMessage.php sofort zurückkehren, auch wenn keine neuen Nachrichten zurückgegeben werden. Der Client würde dann das spezifizierte Intervall warten und dann eine weitere Anfrage senden, wobei er entweder eine neue Nachricht oder gar nichts erhält. Endergebnis ist, dass der schnellste Zeitpunkt, zu dem der Client eine neue Nachricht aktualisiert, das angegebene Intervall ist.

Mit Comet, auf der anderen Seite, getMessage.php würde nicht zurückkehren, bis es etwas zurückgibt. Das bedeutet, dass bei einer ersten Anfrage des Clients nach neuen Nachrichten gesucht wird. Wenn keine vorhanden sind, wird die Nachricht für eine bestimmte Zeit gespeichert und erneut überprüft. Dieser Prozess wird fortgesetzt, bis eine neue Nachricht verfügbar ist oder eine Zeitüberschreitung auftritt. Zu diesem Zeitpunkt sendet der Client eine weitere Anforderung an den Server, und der Prozess wird erneut gestartet. Endergebnis in diesem Fall ist, dass der Client augenblicklich zu aktualisieren scheint.