Was ist der Unterschied zwischen einem einfachen Async-Servlet und dem Comet / Bayeux-Protokoll?
Ich versuche eine "Server Push" (oder "Reverse Ajax") Art von Webseite zu implementieren, die Aktualisierungen vom Server erhält, wenn Ereignisse auf dem Server auftreten. Daher muss der Server, auch ohne dass der Client explizit eine Anfrage sendet, Antworten an den jeweiligen Client-Browser senden können.
Ich verstehe, dass der Kometen der Oberbegriff für diese Art von Technologien ist; mit "Bayeux" ist das Protokoll. Aber als ich die Servlet-Spezifikation durchgesehen habe, scheint sogar das 'Async-Servlet' das Gleiche zu erreichen. Ich meine, ich kann mit dem
ein einfaches Servlet definieren %Vor%Attribut in der web.xml auf true gesetzt; und dieses Servlet wird in der Lage sein, Antworten asynchron an den Client zu senden. Ich kann dann einen jQuery oder ExtJS basierten Ajax Client haben, der einfach ein
macht %Vor%ruft das Servlet auf. So etwas wie im folgenden Link beschrieben Ссылка
Also meine Frage ist das:
Was ist der Unterschied zwischen einem einfachen Async-Servlet und dem Comet / Bayeux-Protokoll?
Danke
Es ist wahr, dass "Comet" der Begriff für diese Technologien ist, aber das Bayeux-Protokoll wird nur von wenigen Implementierungen verwendet. Eine Comet-Technik kann jedes beliebige Protokoll verwenden; Bayeux ist einer von ihnen.
Abgesehen davon gibt es zwei Hauptunterschiede zwischen einer asynchronen Servlet-Lösung und einer Comet + Bayeux-Lösung.
Der erste Unterschied besteht darin, dass die Comet + Bayeux-Lösung unabhängig von dem Protokoll ist, das Bayeux transportiert.
Im Projekt CometD gibt es Plug-in-Übertragungen für Clients und Server, die Bayeux verwenden können.
Sie können es über HTTP übertragen, wobei Bayeux der Inhalt einer POST-Anfrage ist, Sie können es aber auch mit WebSocket verwenden, wobei Bayeux die Nutzlast der WebSocket-Nachricht ist.
Wenn Sie asynchrone Servlets verwenden, können Sie WebSocket nicht einsetzen, das viel effizienter
Der zweite Unterschied besteht darin, dass asynchrone Servlets nur HTTP übertragen und Sie mehr als das benötigen, um entfernte Comet-Clients zu verwalten.
Sie möchten beispielsweise die Clients eindeutig identifizieren, sodass zwei Registerkarten für die gleiche Seite zu zwei verschiedenen Clients führen. Um dies zu tun, müssen Sie der asynchronen Servlet-Anfrage eine "Eigenschaft" hinzufügen, nennen wir sie sessionId
.
Als nächstes möchten Sie in der Lage sein, einen Client zu authentifizieren; Nur authentifizierte Clients können eine sessionId
erhalten. Um jedoch zwischen ersten Anfragen zur Authentifizierung und anderen bereits authentifizierten Anfragen zu unterscheiden, benötigen Sie eine andere Eigenschaft, sagen wir messageType
.
Als Nächstes möchten Sie in der Lage sein, schnelle Verbindungsunterbrechungen aufgrund von Netzwerkverlusten oder anderen Verbindungsproblemen zu melden. Also musst du eine Herzschlaglösung entwickeln, damit du weißt, dass die Verbindung am Leben ist, wenn das Herz schlägt, wenn es nicht schlägt, dass du tot bist, und führe Rettungsaktionen durch.
Als nächstes müssen Sie die Verbindungsfunktionen trennen. Und so weiter.
Sie merken schnell, dass Sie ein weiteres Protokoll über HTTP aufbauen.
An diesem Punkt ist es besser, ein existierendes Protokoll wie Bayeux und bewährte Lösungen wie CometD (das auf Comet-Techniken basiert, die das Bayeux-Protokoll verwenden) wiederzuverwenden, die Ihnen Folgendes bieten:
Sie möchten keine Low-Level-Lösung verwenden, die Sie nur mit HTTP verbindet. Sie möchten eine Lösung auf höherer Ebene verwenden, die Ihre Anwendung von der verwendeten Comet-Methode und von dem Protokoll, das Bayeux transportiert, abstrahiert, sodass Ihre Anwendung einmal geschrieben werden kann und zukünftige Technologieverbesserungen genutzt werden können. Als ein Beispiel für Technologieverbesserung funktionierte CometD gut, bevor asynchrone Servlets ins Bild kamen und nun mit dem asynchronen Servlet einfach skalierbarer wurden und damit Ihre Anwendung, ohne dass eine einzelne Zeile in der Anwendung geändert werden musste.
Wenn Sie eine Lösung auf höherer Ebene verwenden, können Sie sich auf Ihre Anwendung konzentrieren und nicht auf die detaillierten Details, wie man ein asynchrones Servlet richtig schreibt (und das ist nicht so einfach, wie man vielleicht denkt).
Die Antwort auf Ihre Frage könnte lauten: Sie benutzen Comet + Bayeux, weil Sie auf der Schulter von Riesen stehen wollen .
Tags und Links servlet-3.0 comet server-push reverse-ajax bayeux