¿Cuál es la diferencia entre los protocolos WebSocket y STOMP?

96

¿Cuáles son las principales diferencias entre los protocolos WebSocket y STOMP?

LancerSung
fuente

Respuestas:

91

Esta pregunta es similar a preguntar la diferencia entre TCP y HTTP. Aún intentaré abordar su pregunta, es natural confundirse entre estos dos términos si está comenzando.

Respuesta corta

STOMP se deriva de WebSockets. STOMP solo menciona algunas formas específicas sobre cómo se intercambian los marcos de mensajes entre el cliente y el servidor mediante WebSockets.


Respuesta larga

WebSockets

Es una especificación para permitir la comunicación bidireccional síncrona entre un cliente y un servidor. Si bien es similar a los sockets TCP, es un protocolo que funciona como una conexión HTTP mejorada, intercambiando tramas de longitud variable entre las dos partes, en lugar de una secuencia.

PISAR MUY FUERTE

Define un protocolo para que los clientes y servidores se comuniquen con la semántica de mensajería. No define ningún detalle de implementación, sino que aborda un protocolo de cable fácil de implementar para integraciones de mensajería. Proporciona una semántica más alta además del protocolo WebSockets y define un puñado de tipos de tramas que se asignan a las tramas de WebSockets. Algunos de estos tipos son ...

  • conectar
  • suscribir
  • darse de baja
  • enviar (mensajes enviados al servidor)
  • mensaje (para mensajes enviados desde el servidor) BEGIN, COMMIT, ROLLBACK (gestión de transacciones)
Nitin Kamate
fuente
¿quiso decir asincrónico?
Anatolii Stepaniuk
25

WebSocket implica una arquitectura de mensajería pero no exige el uso de ningún protocolo de mensajería específico. Es una capa muy delgada sobre TCP que transforma un flujo de bytes en un flujo de mensajes (ya sea de texto o binario) y no mucho más. Depende de las aplicaciones interpretar el significado de un mensaje.

A diferencia de HTTP, que es un protocolo a nivel de aplicación, en el protocolo WebSocket simplemente no hay suficiente información en un mensaje entrante para que un marco o contenedor sepa cómo enrutarlo o procesarlo. Por lo tanto, podría decirse que WebSocket tiene un nivel demasiado bajo para cualquier cosa que no sea una aplicación muy trivial. Se puede hacer, pero probablemente llevará a crear un marco en la parte superior. Esto es comparable a cómo la mayoría de las aplicaciones web actuales se escriben utilizando un marco web en lugar de la API de Servlet solo.

Por esta razón, WebSocket RFC define el uso de subprotocolos. Durante el protocolo de enlace, el cliente y el servidor pueden utilizar el encabezado Sec-WebSocket-Protocol para acordar un subprotocolo, es decir, un protocolo de nivel de aplicación superior a utilizar. No se requiere el uso de un subprotocolo, pero incluso si no se usa, las aplicaciones deberán elegir un formato de mensaje que tanto el cliente como el servidor puedan entender. Ese formato puede ser personalizado, específico del marco o un protocolo de mensajería estándar.

STOMP  : un protocolo de mensajería simple creado originalmente para su uso en lenguajes de secuencias de comandos con marcos inspirados en HTTP. STOMP cuenta con un amplio soporte y es adecuado para su uso en WebSocket y en la web.

Anna Klein
fuente
13

La API de WebSocket permite que las aplicaciones web manejen comunicaciones bidireccionales, mientras que STOMP es un protocolo de mensajería simple orientado a texto.

El protocolo STOMP se usa comúnmente dentro de un conector web cuando una aplicación web necesita admitir la comunicación bidireccional con un servidor web.

Un buen tutorial es STOMP Over WebSocket de Jeff Mesnill (2012)

STOMP también se puede utilizar sin un websocket, por ejemplo, a través de una conexión Telnet o un servicio de intermediación de mensajes.

Y Raw WebSockets se puede utilizar sin STOMP - Ej. Ejemplo de Spring Boot + WebSocket sin STOMP y SockJs .

intotecho
fuente