Xmpp contra Websocket [closed]

4 minutos de lectura

Estoy a punto de desarrollar un sitio web que tiene chat casi en tiempo real. Sé que se puede implementar usando los protocolos xmpp o websocket. También sé que el protocolo xmpp se desarrolló en 1999, y supongo 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 debo elegir uno de ellos sobre el otro?

  • Recientemente me encontré con el mismo problema, mi respuesta fue optar por 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 seguir adelante al decidir optar por esta tecnología más antigua. Sin embargo, Node es una bestia engañosa y debe abordarlo de manera diferente a como lo haría con JavaScript. Si es lo suficientemente paciente, le sugeriría ir a Node, no solo por esto, sino que le permitirá expandirse en otras áreas con más facilidad.

    – SoloSteveKing

    24/10/2014 a las 13:43

  • XMPP es un protocolo extensible de mensajería y presencia, Websocket es un protocolo que proporciona comunicaciones dúplex completas a través del puerto 80. Compara manzanas con naranjas.

    – Caudal

    24/10/2014 a las 14:34

  • @Flow: en tu opinión, podría estar comparando manzanas con naranjas. Pero lo que estoy preguntando es cuál debo elegir al desarrollar un sitio web que proporcione una capacidad de chat en tiempo real.

    – Khafaga

    25/10/2014 a las 0:00


  • @JustSteveKing La mayoría de las cosas ya están hechas en XMPP, sin embargo, debe administrar esas cosas en node.js. Esto es igual a reinventar la rueda de nuevo.

    –Shahid Karimi

    30 de julio de 2015 a las 9:16

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

Entonces, si está desarrollando una aplicación de chat en un navegador, elegiría XMPP como 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 pensará 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 chat; puede usar websockets sin XMPP, pero lo que esto realmente significa es que está inventando su propio protocolo de capa de aplicación para chat, 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 cual existen bibliotecas y servidores existentes al usar XMPP en su lugar).

  • Hola, lo siento, las preguntas han sido un tiempo, solo me preguntaba, ¿significa que transportar el enlace es como socket.io/strophe.js, y xmpp es como (openfire/Ejabbered)?

    – John

    20 de agosto de 2015 a las 6:09

  • No, lo que estás nombrando son bibliotecas versus servidores.

    – Kev

    22 de julio de 2016 a las 10:39

  • 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ė

    17 de agosto de 2016 a las 10:58

  • buena respuesta de Kev, pero vale la pena señalar que 1> TCP pertenece a la capa 4: capa de transporte, mientras que HTTP y Websocket pertenecen a la capa 7: capa de aplicación.

    – Pi redondo

    1 de mayo de 2020 a las 9:31

  • No usa websockets encima de XMPP, usa XMPP encima de websockets. Websockets puede ser un protocolo de capa de aplicación en el modelo OSI, pero eso no es particularmente útil cuando se trata de superponer más protocolos sobre websockets. Es mucho más fácil pensar en websockets como un transporte de red para XMPP, cuando se usan con XMPP.

    – Kev

    22 de enero de 2021 a las 17:41


¿Ha sido útil esta solución?