Frage

ich auf einen einfachen Benachrichtigungsdienst arbeite, die verwendet werden Nachrichten an die Benutzer zu liefern, eine Website zu surfen. Die Meldungen müssen nicht in Echtzeit gesendet werden, aber es könnte eine bessere Benutzererfahrung, wenn sie öfter passiert als alle 5 Minuten sagen. Die Daten, die gesendet werden, und von der Client ist nicht sehr groß, und es ist ein straight forward-Datenbank-Abfrage die Daten abzurufen.

In anderen Gesprächen über das Thema zu lesen scheint es, dass ein AJAX-Push in höhere Serverlasten führen kann. Da ich Verzögerungen mehr Server tolerieren kann, ist es die Server-Push-Benachrichtigungen der Mühe wert, haben oder einfach Umfrage.

Es ist nicht viel schwieriger, das Push-Szenario zu implementieren und so dachte ich, ich würde sehen, was die Meinung war hier.

Danke für Ihre Hilfe.

EDIT: Ich habe in eine einfache AJAX Push-geschaut und implementiert eine einfache Demo auf der Grundlage dieser Artikel von Mike Purvis. Die Client-Belastung ist ziemlich niedrig bei etwa 5k für die erste Version und erwartet, dass die Art und Weise für einige Zeit zu bleiben.


Vielen Dank an alle für Ihre Antworten. Ich habe beschlossen, mit der Abfrage Lösung zu gehen, aber sie alle innerhalb einer Utility-Bibliothek zu wickeln, so dass, wenn sie es ändern mögen später ist es einfacher.

War es hilfreich?

Lösung

Da eine Drück eine offene HTTP-Verbindung erfordert, zwischen Ihrem Server und jedem Client beibehalten werde ich auch für Umfrage gehen würde - nicht nur, dass eine Menge von Server-Ressourcen gehen zu konsumieren, sondern es ist auch deutlich sein werde komplizierter als matt zu implementieren b genannt.

Meine Erfahrung mit Polling ist, dass, wenn Sie ein häufig genug Abfrageintervall auf einer belebten genug Website Ihrer Webserver-Logs haben können echten schnell mit Umfrage-Anfragen überflutet.

Edit (2017) : Ich würde sagen, dass Ihre Entscheidungen sind jetzt zwischen WebSockets und lange Polling (in einer anderen Antwort erwähnt). lange Polling klingt wie könnte die richtige Wahl sein, auf der Grundlage der Art und Weise die Frage erwähnt, dass die Meldungen nicht brauchen, wäre ziemlich einfach, in Echtzeit, eine seltene Abfrageperiode empfangen werden zu implementieren und nicht sehr sollte die Besteuerung auf dem Server . Websockets sind kühl und eine gute Wahl für diese Tage viele Anwendungen, klingt wie das übertreibt, obwohl in diesem Fall sein könnte.

Andere Tipps

Ich bin hier überrascht niemand lange Polling erwähnt hat. Lang-Abfrage-Mittel für einen längeren Zeitraum eine offene Verbindung zu halten (etwa 30 bis 60 Sekunden), und wenn es geschlossen ist, Wiedereröffnung sich wieder, und einfach mit der Buchse / Anschluss für Antworten hören. Dies führt zu weniger Verbindungen (aber die längeren), und bedeutet, dass die Antworten fast sofort sind (einige können für eine neue Wahl Verbindung warten). Ich mag, dass mit Technologien wie NodeJS in Kombination hinzuzufügen, führt dies zu einer sehr effizienten und ressourcenschonende Lösung, die 100% Browser kompatibel für alle gängigen Browser und Versionen, und erfordert keine zusätzlichen Techniker wie Comet oder Flash.

Ich weiß, dies ist eine alte Frage, aber dachte, es immer noch nützlich sein könnte, diese Informationen zu liefern:)

Auf jeden Fall verwenden, schieben seine viel kühler. Wenn Sie nur einfache Benachrichtigungen mag ich so etwas wie verwenden StreamHub Push-Server das schwere Heben für Sie tun. Ihre eigene Ajax Push-Funktionalität zu entwickeln, ist ein äußerst heikel und steiniger Weg - Sie haben es in allen Browsern zum Laufen zu bringen und dann Firewalls und Proxies Keep-Alive-Verbindungen usw. zu töten behandeln ... Warum das Rad neu erfinden. Außerdem hat es eine ähnlich geringe Stellfläche von weniger als 10K so sollte es passen, wenn das ist eine Priorität für Sie.

Beide haben diferent Anforderungen und Adresse diferent Szenarien.

Wenn Sie Neuigkeiten in Echtzeit , wie in einem Online-Chat, Push ist ein Muss.

Aber, wenn die Auffrischperiode ist groß , wie es in Ihrem Fall (5 Minuten), dann ist Pool die passende Lösung. Schieben, in diesem Fall wird eine Menge von Ressourcen erfordern sowohl aus dem Client und dem Server.

Tipp! versuchen, die Seite zu machen, dass der Pool schnell und sauber überprüft, so dass es nicht verbraucht nicht viele Ressourcen auf dem Server in jeder Anforderung. Was ich in der Regel tun, ist ein Flag im Speicher zu halten (wie in einer Session-Variablen), die sagt, wenn der Pool leer ist oder nicht ... so, ich weiß nur havy Blick in den Pool nur dann, wenn es nicht leer ist. Wenn der Pool leer ist, die meiste Zeit ist, läuft die Seite Anfrage extrem schnell.

Ich würde eine Umfrage durchführt, nur weil es einfacher klingt zu schreiben, und es ist einfach sehr wertvoll zu halten.

Nicht sicher, ob man einen Blick auf einige der COMET-Implementierungen da draußen genommen hat (das ist, was Sie von AJAX Push meine).

Wenn der Benutzer die Website surft, wird dies nur dann Auswirkungen auf Informationen von dem Server anfordert, die diese Benachrichtigung Huckepack-auf?

Es ist unmöglich zu sagen, ob Polling teurer sein wird, dann schieben, ohne zu wissen, wie viele Kunden Sie haben. Ich würde empfehlen, Polling, weil:

  • Es klingt wie Sie Daten aktualisieren etwa einmal pro Minute wollen. Es sei denn, Meldungen mit einer viel schnelleren Rate als die ankommen können, würde bedeuten, drücken Sie halten eine HTTP-Verbindung offen, aber sehen sehr wenig Aktivität auf sich.
  • Polling wird auf den bestehenden HTTP-Konventionen aufgebaut, so dass jeder Server, dem Web-Browser spricht, ist schon bereit zu gewöhnlichen Ajax-Anfragen zu reagieren. Eine Comet- oder Flash-Sockel-basierte Lösung hat unterschiedliche Anforderungen; Sie werden so etwas wie cometd auf der Server-Seite benötigen und eine clientseitige Bibliothek, die serverseitige Push-Realos.

Wenn Sie also etwas schwere erforderlich, um eine Flut von Daten und eine crapload von Kunden zu verwalten, würde ich empfehlen Comet. Aber das scheint nicht der Fall zu sein.

Es gibt jetzt eine Service http://pusherapp.com , dass dieses Problem versucht, einmal zu lösen und für alle, in ein Blinzeln. Könnte sein lohnt sich. (Disclaimer: Ich bin in keiner Weise mit ihnen verbunden sind)

.

Ich habe es selbst nicht ausprobiert, aber manche sagen COMET arbeitet und ist einfacher als Sie denken . Es gibt auch eine Ruby on Rails-Plug-in namens Juggernaut , dass ich über sehr gesprochen gehört habe. Auch hier habe ich es nicht, so YMMV verwendet, aber mein Verständnis ist, dass es im Vergleich zu der Wahl weit weniger Ressourcen nimmt. Ich glaube, (kann jemand bestätigen?), Dass COMET ist, wie MacRumorsLive.com Live-Blogging von der WWDC Stevenotes liefert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top