2013-08-07 7 views
9

Ich kam auf diese examples zeigen Umfrage vs Long-Polling in Javascript, aber ich verstehe nicht, wie sie sich voneinander unterscheiden. Vor allem in Bezug auf das lange Polling-Beispiel, wie hält es seine Verbindung offen?polling vs lange polling

Dies ist, was die traditionelle Wahl Szenario wie folgt aussieht:

(function poll(){ 
    setTimeout(function(){ 
    $.ajax({ url: "server", success: function(data){ 
     //Update your dashboard gauge 
     salesGauge.setValue(data.value); 

     //Setup the next poll recursively 
     poll(); 
    }, dataType: "json"}); 
    }, 30000); 
})(); 

und das ist die lange Abfrage Beispiel:

(function poll(){ 
    $.ajax({ url: "server", success: function(data){ 
    //Update your dashboard gauge 
    salesGauge.setValue(data.value); 

    }, dataType: "json", complete: poll, timeout: 30000 }); 
})(); 

Dank!

Antwort

12

Der Unterschied besteht darin, dass lange Abfragen eine ereignisgesteuerte Benachrichtigung ermöglichen, sodass der Server aktiv Daten an den Client senden kann. Normales Polling ist ein periodisches Überprüfen auf Daten, die sozusagen zu holen sind. Wikipedia ist ziemlich genau darüber:

Mit langem Polling fordert der Client Informationen vom Server auf eine Weise an, die einem normalen Polling ähnlich ist; Wenn dem Server jedoch keine Informationen für den Client zur Verfügung stehen, hält der Server die Anforderung, statt eine leere Antwort zu senden, und wartet darauf, dass Informationen verfügbar werden (oder für ein geeignetes Zeitüberschreitungs-Ereignis), wonach eine vollständige Antwort erfolgt schließlich an den Kunden gesendet.

Lange Abfragen reduzieren die Menge der Daten, die gesendet werden müssen, da der Server nur Daten sendet, wenn wirklich Daten vorhanden sind. Daher muss der Client nicht in jedem Intervall x prüfen.

Wenn Sie eine performantere (und elegantere) Art der Vollduplex-Client/Server-Kommunikation benötigen, sollten Sie das WebSocket-Protokoll verwenden, es ist großartig!

+1

Kann der Client den Unterschied zwischen langem Polling und langsamer Antwort feststellen? Es scheint mir, dass Umfragen und lange Umfragen im Grunde dasselbe sind. Polling: "Client: Ist es schon fertig? Server: Nein". Long Polling: "Client: Ist es schon fertig? Server: ... Nein". – DavidS

+0

@Davids: Hier ist der Unterschied: Beim Polling fragt der Client und bekommt sofort eine Antwort "Ja/oder". Bei langem Polling fragt der Client, erhält aber keine sofortige Antwort. Der Server antwortet nicht auf die Frage, bis * er * etwas hat, was er beantworten kann. Die Frage ist also die ganze Zeit anhängig. – Robert

+0

@Robert was passiert, wenn ein Timeout-Ereignis auftritt und der Server keine Daten in langen Abfragen senden kann? Sollte der Kunde die gleiche Anfrage erneut senden? –

2

Polling ist im Grunde der Prozess der regelmäßigen Überprüfung der Server für Informationen nach einer Anfrage durch den Client. Wenn die erforderlichen Informationen verfügbar sind, werden sie in Form einer Antwort an den Client gesendet, andernfalls sendet der Server eine leere Antwort. Das Polling erfolgt mit Hilfe von Funktionen wie setInterval() und setTimeout().

Bei Lange Polling, stellt der Client eine Anfrage an den Server und wenn die Antwort verfügbar ist, antwortet der Server mit den Informationen, andernfalls es den Antrag hält, bis die erforderlichen Informationen nicht zur Verfügung steht. Im Gegensatz zum traditionellen Polling wo der Server mit einer leeren Antwort geantwortet hätte.