Quais são as principais diferenças entre os protocolos WebSocket e STOMP?
Essa pergunta é semelhante a perguntar a diferença entre TCP e HTTP. Eu ainda tentarei responder à sua pergunta, é natural ficar confuso entre esses dois termos se você estiver começando.
Resposta curta
O STOMP é derivado do WebSockets. O STOMP menciona apenas algumas maneiras específicas de como os quadros de mensagens são trocados entre o cliente e o servidor usando WebSockets.
Resposta longa
WebSockets
É uma especificação para permitir a comunicação bidirecional síncrona entre um cliente e um servidor. Embora semelhante aos soquetes TCP, é um protocolo que opera como uma conexão HTTP atualizada, trocando quadros de comprimento variável entre as duas partes, em vez de um fluxo.
STOMP
Ele define um protocolo para clientes e servidores se comunicarem com a semântica de mensagens. Ele não define nenhum detalhe de implementação, mas sim um protocolo de conexão fácil de implementar para integrações de mensagens. Ele fornece uma semântica mais alta no topo do protocolo WebSockets e define um punhado de tipos de quadros que são mapeados em quadros WebSockets. Alguns desses tipos são ...
WebSocket implica uma arquitetura de mensagem, mas não obriga o uso de nenhum protocolo de mensagem específico. É uma camada muito fina sobre o TCP que transforma um fluxo de bytes em um fluxo de mensagens (texto ou binário) e não muito mais. Cabe aos aplicativos interpretar o significado de uma mensagem.
Ao contrário do HTTP, que é um protocolo de nível de aplicativo, no protocolo WebSocket simplesmente não há informações suficientes em uma mensagem de entrada para uma estrutura ou contêiner saber como encaminhá-la ou processá-la. Portanto, WebSocket é sem dúvida um nível muito baixo para qualquer coisa, exceto um aplicativo muito trivial. Isso pode ser feito, mas provavelmente levará à criação de uma estrutura por cima. Isso é comparável à forma como a maioria dos aplicativos da web hoje são escritos usando uma estrutura da web em vez da API de Servlet sozinha.
Por esta razão, o WebSocket RFC define o uso de subprotocolos. Durante o handshake, o cliente e o servidor podem usar o cabeçalho Sec-WebSocket-Protocol para concordar com um sub-protocolo, ou seja, um protocolo de nível de aplicativo superior a ser usado. O uso de um subprotocolo não é obrigatório, mas mesmo se não for usado, os aplicativos ainda precisarão escolher um formato de mensagem que o cliente e o servidor possam entender. Esse formato pode ser personalizado, específico da estrutura ou um protocolo de mensagens padrão.
STOMP - um protocolo de mensagens simples, originalmente criado para uso em linguagens de script com frames inspirados em HTTP. STOMP é amplamente suportado e adequado para uso em WebSocket e na web.
fonte
A API WebSocket permite que os aplicativos da web lidem com comunicações bidirecionais, enquanto o STOMP é um protocolo de mensagens orientado por texto simples.
O protocolo STOMP é comumente usado dentro de um soquete da web quando um aplicativo da web precisa oferecer suporte à comunicação bidirecional com um servidor da web.
Um bom tutorial é STOMP Over WebSocket de Jeff Mesnill (2012)
O STOMP também pode ser usado sem um websocket, por exemplo, por meio de uma conexão Telnet ou um serviço de corretagem de mensagens.
E Raw WebSockets pode ser usado sem STOMP - Ex. Exemplo Spring Boot + WebSocket sem STOMP e SockJs .
fonte