Web Anwendungen mit Comet in Echtzeit updaten

Vor kurzem habe ich in einem wirkungsvollen, aber komplexen Web-Applikation Technologie, die wir erwägen, mit in zukünftigen Versionen des Hub sind gesucht.

Das Problem: Wie können wir aktualisieren einem Browser anzeigen, wenn ein Prozess im Hintergrund die Datenbank aktualisiert?

Ein paar Beispiele von Orten in den Hub, wo dies kommt …

  • User startet Server wartet, bis der Server eine IP zu bekommen, für den Status-Symbol, um Farbe, etc. ändern
  • User ordnet einem Server mit einer elastischen IP
  • User legt ein EBS oder löst ein EBS
  • Die Instanz Cache verfällt nach n Minuten, ein Prozess im Hintergrund lädt die Informationen, die sich von der vorher angezeigten Informationen.

Sie können “plain old” AJAX Polling alle N Sekunden (und die meisten Sites mit “real-time”-Daten zu tun), aber es gibt ein paar Einschränkungen:

  1. Will nie real-time
  2. Es kann schwierig zu skalieren

Wäre es nicht ordentlich, wenn anstelle von Polling, Änderungen an Datenbank-Staat könne on the fly im Browser ohne Zutun des Benutzers verschoben werden?

Nun stellt sich heraus, Sie genau tun können, die über eine Technik namens “Reverse AJAX” oder “Comet”, die lange verwendet warten Anfragen vom Client zum Server, um sicherzustellen, gibt es eine Verbindung, die immer eingeschaltet und betriebsbereit “geschoben” Updates akzeptieren vom Server.

Aber da Sie nicht wollen, um eine synchrone Prozess zu jeder wartet Umfrage zu widmen, ist es am besten zu nutzen speziell entwickelte Server-Software, die Ihnen dabei helfen.

Derzeit Comet ist vor allem die für Chat-ähnliche Anwendungen (z. B. GTalk, Meebo, Facebook Chat) verwendet und scheint eine erhebliche Komplexität (sogar mehr als normale AJAX) hinzufügen, damit ich bin mir nicht sicher, es wäre eine gute Idee, diese für den Einsatz werden etwas so Einfaches wie die Aktualisierung eines Servers zu sehen, aber das hängt von Details der Implementierung so würde ich es nicht ausschließen von der Fledermaus.

Comet ist nur ein Überbegriff für diese Art von Technik. Das aktuelle Protokoll in der Implementierung verwendet wird typischerweise STOMP, ein Messaging-Protokoll, das von RabbitMQ (und viele andere) unterstützt.

Beachten Sie, dass es viele gute Open-Source-Komponenten, die genutzt werden, um Comet-Anwendungen zu implementieren können:

  • Umkreist: ein asynchrones COMET-Server in Python
  • Js.io: Client-seitige STOMP Client