Xmpp Vs Websocket [geschlossen]

88

Ich bin dabei, eine Website zu entwickeln, die nahezu Echtzeit-Chat bietet. Ich weiß, dass es mit xmpp- oder Websocket-Protokollen implementiert werden kann. Ich weiß auch, dass das xmpp-Protokoll 1999 entwickelt wurde, und ich denke, es sollte heutzutage ausgereift sein. Andererseits wurde das Websocket-Protokoll 2011 entwickelt.

  1. Was brauchte Websocket, wenn xmpp gut mit Echtzeitgesprächen umgehen konnte?
  2. Was sind die Hauptunterschiede zwischen den beiden Protokollen?
  3. Und wann sollte ich einen von ihnen dem anderen vorziehen?
Khafaga
quelle
1
Ich bin kürzlich auf dasselbe Problem gestoßen. Meine Antwort war, mich für WebSockets zu entscheiden. Node.JS wird eine äußerst beliebte Sprache, und das sollte es auch sein. XMPP ist in Ordnung - aber meiner Meinung nach beschränken Sie sich darauf, sich für diese ältere Technologie zu entscheiden. Node ist jedoch ein kniffliges Biest und Sie müssen es anders angehen als JavaScript. Wenn Sie geduldig genug sind, würde ich vorschlagen, Node zu wählen - nicht nur aus diesem Grund, sondern auch, um leichter in anderen Bereichen zu expandieren.
JustSteveKing
7
XMPP ist ein erweiterbares Messaging- und Präsenzprotokoll. Websocket ist ein Protokoll, das Vollduplex-Kommunikation über Port 80 ermöglicht. Sie vergleichen Äpfel mit Orangen.
Flow
16
@Flow: Ich vergleiche Ihrer Meinung nach vielleicht Äpfel mit Orangen. Ich frage jedoch, welche ich bei der Entwicklung einer Website wählen soll, die eine Echtzeit-Chat-Funktion bietet.
Khafaga
1
@JustSteveKing Die meisten Dinge sind bereits in XMPP erledigt, Sie müssen diese Dinge jedoch in node.js verwalten. Dies entspricht einer erneuten Erfindung des Rades.
Shahid Karimi

Antworten:

133

Die kurze Antwort lautet "beides".

XMPP ist ein Satz von Anwendungsprotokollen für Echtzeit-Chats (und viele andere Dinge). Es muss dann irgendwie über das Netzwerk transportiert werden, sodass Sie eine Transportbindung benötigen. Es gibt drei Haupttransportbindungen für XMPP -

  1. TCP / IP, wie es normalerweise im Internet mit nativen Clients auf Geräten verwendet wird
  2. HTTP (BOSH genannt), wie es traditionell bei der Verwendung von XMPP im Browser verwendet wird (da TCP-IP für Javascript-Apps im Browser nicht verfügbar ist)
  3. Websockets, die verwendet werden, wenn XMPP in einem modernen Browser ausgeführt wird.

Wenn Sie also eine Chat-Anwendung in einem Browser entwickeln, wählen Sie XMPP als Anwendungsprotokoll und verwenden Websockets (in einem modernen Browser) oder BOSH (in einem älteren Browser) als Netzwerktransport. Wenn Sie eine XMPP-Bibliothek für Javascript wie Stanza.io ( https://github.com/otalk/stanza.io ) verwenden, wird beide unterstützt, und Sie denken nur an 'XMPP' und nicht an die Transportschicht. anders als beim Setup, wenn Sie angeben müssen, zu welchem ​​Endpunkt eine Verbindung hergestellt werden soll.

(Sie können nicht "nur Websockets" für den Chat verwenden - Sie können Websockets ohne XMPP verwenden. Dies bedeutet jedoch, dass Sie Ihr eigenes Protokoll auf Anwendungsebene für den Chat erfinden und die Chancen stehen, dass Sie sparen viel Zeit und Kopfschmerzen, indem Sie die Arbeit nutzen, die bereits in das Schreiben einer mit nützlichen Eigenschaften (Sicherheit, Identität, Erweiterbarkeit usw.) investiert wurde und für die es vorhandene Bibliotheken und Server gibt, indem Sie stattdessen XMPP verwenden.)

Kev
quelle
1
Hallo, tut mir leid, die Fragen sind eine Weile her, ich frage mich nur, bedeutet das, dass das Transportieren von Bindungen wie socket.io/strophe.js ist und die xmpp wie (openfire / Ejabbered) ist?
John
1
Nein, was Sie dort nennen, sind Bibliotheken im Vergleich zu Servern.
Kev
Hier ist mehr über Ebenen (inkl. Transport, Anwendungsebenen): en.wikipedia.org/wiki/OSI_model
Karina Klinkevičiūtė
2
Gute Antwort von Kev, aber es kann erwähnenswert sein, dass 1> TCP zur Schicht 4 - Transportschicht gehört, während sowohl HTTP als auch Websocket zur Schicht 7 - Anwendungsschicht gehören.
1.
In der Tat @ Gob00st - ich bin auch hier verwirrt. Diese Antwort von Kev sagt "beides", weil "Sie Websockets (in einem modernen Browser) ... als Netzwerktransport verwenden würden " . Aber wie können wir das mit der Tatsache vereinbaren, dass WebSocket (als XMPP und HTTP) tatsächlich Anwendungsprotokolle ( nicht Transportprotokolle) in der OSI-Schicht 7 sind? Warum sollte XMPP in einem modernen Browser "über" WebSockets gehen?
Amelio Vazquez-Reina