Xmpp Vs Websocket [cerrado]

88

Estoy a punto de desarrollar un sitio web que tenga chat casi en tiempo real. Sé que se puede implementar usando protocolos xmpp o websocket. También sé que el protocolo xmpp se desarrolló en 1999, y creo que debería estar maduro hoy en día. Por otro lado, el protocolo websocket se desarrolló en 2011.

  1. ¿Cuál era la necesidad de websocket si xmpp era bueno para manejar conversaciones en tiempo real?
  2. ¿Cuáles son las principales diferencias entre los 2 protocolos?
  3. ¿Y cuándo debería elegir uno de ellos sobre el otro?
Khafaga
fuente
1
Recientemente me encontré con el mismo problema, mi respuesta fue ir a WebSockets. Node.JS se está convirtiendo en un lenguaje extremadamente popular, y por derecho debería serlo. XMPP está bien, sin embargo, en mi opinión, se está limitando a avanzar al decidir optar por esta tecnología más antigua. Sin embargo, Node es una bestia engañosa y tienes que enfocarlo de manera diferente a como lo harías con JavaScript. Si eres lo suficientemente paciente, te sugiero que vayas a Node, no solo por esto, sino que te permitirá expandirte en otras áreas con más facilidad.
JustSteveKing
7
XMPP es un protocolo extensible de mensajería y presencia, Websocket es un protocolo que proporciona comunicaciones full duplex a través del puerto 80. Usted compara las manzanas con las naranjas.
Flujo
16
@Flow: En su opinión, podría estar comparando manzanas con naranjas. Pero lo que estoy preguntando es cuál debería elegir al desarrollar un sitio web que proporcione una capacidad de chat en tiempo real.
Khafaga
1
@JustSteveKing La mayoría de las cosas ya están hechas en XMPP, sin embargo, debe administrar esas cosas en node.js. Esto equivale a reinventar la rueda nuevamente.
Shahid Karimi

Respuestas:

133

La respuesta corta es "ambos".

XMPP es un conjunto de protocolos de aplicación para chatear en tiempo real (y muchas otras cosas, para el caso); luego debe transportarse a través de la red de alguna manera, por lo que necesita un enlace de transporte. Hay tres enlaces de transporte principales para XMPP:

  1. TCP / IP, que es lo que se suele utilizar en Internet con clientes nativos en dispositivos.
  2. HTTP (llamado BOSH), que es lo que uno ha usado tradicionalmente cuando se usa XMPP en el navegador (ya que TCP-IP no está disponible para las aplicaciones de Javascript en el navegador)
  3. Websockets, que es uno de los que se utilizan cuando se hace XMPP en un navegador moderno.

Entonces, si está desarrollando una aplicación de chat en un navegador, elegiría XMPP como el protocolo de aplicación y usaría websockets (en un navegador moderno) o BOSH (en un navegador más antiguo) como transporte de red. Si usa una biblioteca XMPP para Javascript como Stanza.io ( https://github.com/otalk/stanza.io ), admitirá ambos y solo estará pensando en 'XMPP' en lugar de la capa de transporte, excepto en la configuración cuando tiene que decirle a qué punto final conectarse.

(No puede usar 'solo websockets' para chatear; puede usar websockets sin XMPP, pero lo que esto realmente significa es que está inventando su propio protocolo de capa de aplicación para chatear, y lo más probable es que ahorre mucho tiempo y dolores de cabeza al aprovechar el trabajo que ya se ha realizado para escribir uno con propiedades útiles (seguridad, identidad, extensibilidad, etc.) y para el que existen bibliotecas y servidores al optar por XMPP).

Kev
fuente
1
Hola, lo siento, las preguntas han pasado un tiempo, solo me pregunto, ¿significa que el transporte de enlaces es como socket.io/strophe.js y el xmpp es como (openfire / Ejabbered)?
John
1
No, lo que estás nombrando son bibliotecas versus servidores.
Kev
Aquí hay más información sobre las capas (incluido el transporte, las capas de aplicación): en.wikipedia.org/wiki/OSI_model
Karina Klinkevičiūtė
2
buena respuesta de Kev pero vale la pena señalar 1> TCP pertenece a la capa 4 - capa de transporte mientras que HTTP y Websocket pertenecen a la capa 7 - capa de aplicación.
Gob00st
De hecho, @ Gob00st: aquí también estoy confundido. Esta respuesta de Kev dice "ambos" porque "usarías websockets (en un navegador moderno) ... como transporte de red " . Pero, ¿cómo conciliamos eso con el hecho de que WebSocket (como XMPP y HTTP) son en realidad protocolos de aplicación ( no de transporte) en, por ejemplo, OSI capa 7? ¿Por qué XMPP iría "encima" de WebSockets en un navegador moderno?
Amelio Vazquez-Reina