java websocket xmpp real-time near-real-time

java - Xmpp Vs Websocket



real-time near-real-time (2)

Básicamente, estás comparando dos cosas diferentes entre sí. XMPP es un protocolo de aplicación, mientras que WebSockets es un protocolo de transporte.

Creo que usar XMPP te ahorrará mucho tiempo. Sin embargo, perderá la libertad de implementar funcionalidades de la manera que mejor se adapte a usted. Si su aplicación utilizará solo mensajes uno a uno y funciones de lista de amigos sin un plan claro sobre lo que agregará en el futuro, WebSockets + sería una solución viable. Por otro lado, si su aplicación se beneficiará de otras extensiones XMPP, como la mensajería multipartita y las sesiones de medios punto a punto, sería mejor usar XMPP ya que dichas funciones requerirán mucho tiempo para implementarse.

Estoy a punto de desarrollar un sitio web que tiene 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 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?

La respuesta corta es ''ambos''.

XMPP es un conjunto de protocolos de aplicación para hacer chat 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 generalmente se usa en Internet con clientes nativos en 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 al hacer 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 utiliza 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, aparte de en la configuración cuando tiene que decirle a qué punto final conectarse.

(No puede usar ''solo websockets'' para el 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 el chat, y lo más probable es que ahorre mucho tiempo y dolores de cabeza aprovechando el trabajo que ya se ha escrito para escribir uno con propiedades útiles (seguridad, identidad, extensibilidad, etc.) y para el que hay bibliotecas y servidores existentes al utilizar XMPP).