Frage

Ich bin whiling eine Unterstützung von Server-Side-Event in dem CppCMS . Ich verstehe den technischen Teil dessen, was auf das zu tun Ebene der Kommunikation: Client lang Polling XMLHttpRequest und wartet auf respond sendet, Server akzeptiert die Verbindung und nicht reagiert, bis Server-Seite Ereignis eintritt und sendet die Antwort an den Client. Der Client wiederholt den Vorgang.

Dies ist jedoch zu „niedriger“ Pegel für die meisten Web-Entwickler. Es gibt viele Fragen: Wie kann ich Ereignisse verwalten, wie schaffe ich es Verbindungen und so weiter

.

Ich dachte über zwei mögliche Modelle:

  1. Es gibt einige benannte Ereignisse definiert und die Server-Seite, zum Beispiel „Neue Nachricht im Chat-Raum keine 134“; wenn die Anforderung der Server-Seite akzeptiert Anwendung prüft die Meldungen im Zimmer (zum Beispiel in DB) und wenn es keine neue Nachrichten für den Client es abonniert Ereignis und wartet auf sie.

    Wenn einige andere Client-Beiträge Daten an den Server, sie alle Anwendungen informiert über die „Neue Nachricht im Chat-Raum keine 134“ Ereignis und sie aufwachen und diese Nachrichten senden Kunden, und so weiter.

    Dieses Modell ist immer noch sieht aus wie ganz „low level“ -Modell, aber es verbirgt alle Benachrichtigungsmethoden.

  2. Eine andere Möglichkeit ist es, einige genannt Warteschlangen zu definieren, so dass jeder Client erstellt solche Warteschlange bei der Verbindung zum Server und wartet auf neue Nachrichten. Wenn einige Client postet eine neue Nachricht zu „Chat-Raum keine 134“, auf der Server-Seite es ausgestrahlt wird „Chat-Raum keine 134“ an alle Warteschlangen mit diesem verbunden ist, und die Nachricht wird geliefert zum Client.

    Allerdings gibt es viele Fragen, die aufgegangen sind:

    • Wie kann ich verwalten Warteschlangen und die Session-Ebene, auf der Ebene der einzelnen Seite?
    • Wie kann ich Warteschlangen löschen und erstellen Timeouts auf sie?
    • Was passiert, wenn mehr als ein „Fenster“ geschieht abonniert gleiche Warteschlange?
  3. Erstellen Sie ein persistentes Objekt auf Server-Seite, dass Kleber zwischen Server Side-Event und Anwenderseite Veranstaltungen. Es kann über verschiedene XHR-Anfragen kommunizieren, sind umgeleitet es.

    So Client (JavaScript) registriert Ereignisse und wartet auf sie mit XHR und Server-Seite versandt Ereignisbenachrichtigungen, bis die Seite neu zu erstellen.

Also, ich würde gerne wissen, was am beliebtesten ist und empfohlen API-Modelle hinter serverseitige Push-Technologien?

Danke

Bearbeiten : Hinzugefügt dritte Option

War es hilfreich?

Lösung

Sie sollten überprüfen XMPP PubSub , das Protokoll eine generische Publish / Subscribe definiert über XMPP. Es gibt auch eine XMPP Erweiterung namens BOSH (niedrigerer Ebene Protokoll werden getrennt in dokumentiert < a href = "http://xmpp.org/extensions/xep-0124.html" rel = "nofollow noreferrer"> XEP-0124 ), die einen Mechanismus definiert, die langen XMPP Server zu binden HTTP-Clients ermöglicht, unter Verwendung von -polling (dh Komet). diese beiden Spezifikationen Der Kombination gibt Ihnen ein robustes Event Abonnement-Modell für Web-Anwendungen unter Verwendung von Kometen. Selbst wenn Sie am Ende nicht XMPP / BOSH verwenden, enthalten die Angaben einige wertvolle Einblicke, wie diese Art von System kann gebaut werden.

Wenn Sie mit XMPP und BOSH hier am Ende sind einige Werkzeuge können Sie nützlich finden:

  • StropheJS . Eine Bibliothek für das Schreiben clientseitige XMPP-Clients, die BOSH sprechen
  • Idavoll . Eine generische Publish-Subscribe-Service-Komponente für XMPP-Server
  • Punjab : Ein BOSH Verbindungsmanager, der als eine Art "übersetzen Proxy" zwischen BOSH wirkt HTTP Clients und die XMPP-Server.

Zwar ist dies eine sehr schwere Lösung, und es kann für Ihre Anwendung nicht geeignet sein, aber eine Menge Gedanken wurde in diese Standards setzen, so dass sie sehr nützlich sein.

Andere Tipps

Versuchen

Bayeux , es ist sehr ähnlich wie Ihr erstes Modell. Der Client subscribe Kanal "Chatroom / new-Nachricht / 134". Wenn es neue Nachricht , wird der Server übertragen auf die Abonnenten .

Sie können Wildcard-Kanalnamen verwenden, um mehrere Räume "Chatroom / new-message / *" (Hinter nur)

abonnieren

Es gibt keine allgemeine Lösung, die alle Anwendungen passt. Wenn Sie über einige allgemeine Muster lernen wollen, haben einen Blick auf Ereignisgesteuerte Architekturen .

Es gibt einige gleitet online von einem Präsentation ich habe einmal an (es ist ein ziemlich hoher Ebene Blick auf das Thema).

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