В чем разница между протоколами WebSocket и STOMP?

Ответы:

91

Этот вопрос похож на вопрос о разнице между TCP и HTTP. Я все же попытаюсь ответить на ваш вопрос, вполне естественно запутаться между этими двумя терминами, если вы только начинаете.

Короткий ответ

STOMP является производным от WebSockets. STOMP просто упоминает несколько конкретных способов обмена фреймами сообщений между клиентом и сервером с помощью WebSockets.


Длинный ответ

WebSockets

Это спецификация, позволяющая синхронную двунаправленную связь между клиентом и сервером. Подобно сокетам TCP, это протокол, который работает как обновленное HTTP-соединение, обмениваясь кадрами переменной длины между двумя сторонами, а не потоком.

Тупить

Он определяет протокол для клиентов и серверов для взаимодействия с семантикой обмена сообщениями. Он не определяет никаких деталей реализации, а скорее обращается к легко реализуемому проводному протоколу для интеграции обмена сообщениями. Он обеспечивает более высокую семантику поверх протокола WebSockets и определяет несколько типов фреймов, которые отображаются на фреймы WebSockets. Некоторые из этих типов ...

  • подключиться
  • подписываться
  • отказаться от подписки
  • send (сообщения, отправленные на сервер)
  • сообщение (для сообщений, отправленных с сервера) BEGIN, COMMIT, ROLLBACK (управление транзакциями)
Нитин Камате
источник
вы имели в виду асинхронный?
Анатолий Степанюк
25

WebSocket подразумевает архитектуру обмена сообщениями, но не требует использования какого-либо конкретного протокола обмена сообщениями. Это очень тонкий слой над TCP, который преобразует поток байтов в поток сообщений (текстовых или двоичных) и не более того. Приложения должны интерпретировать значение сообщения.

В отличие от HTTP, который является протоколом уровня приложения, в протоколе WebSocket во входящем сообщении просто недостаточно информации, чтобы фреймворк или контейнер знали, как его маршрутизировать или обрабатывать. Следовательно, WebSocket, возможно, слишком низкий уровень для чего-либо, кроме очень тривиального приложения. Это можно сделать, но, скорее всего, это приведет к созданию фреймворка поверх. Это сопоставимо с тем, как сегодня большинство веб-приложений пишутся с использованием веб-фреймворка, а не только API сервлетов.

По этой причине WebSocket RFC определяет использование подпротоколов. Во время рукопожатия клиент и сервер могут использовать заголовок Sec-WebSocket-Protocol, чтобы договориться о подпротоколе, то есть о протоколе более высокого уровня приложения. Использование подпротокола не требуется, но даже если он не используется, приложениям все равно нужно будет выбрать формат сообщения, понятный как клиенту, так и серверу. Этот формат может быть индивидуальным, специфичным для платформы или стандартным протоколом обмена сообщениями.

STOMP  - простой протокол обмена сообщениями, изначально созданный для использования в языках сценариев с фреймами, вдохновленными HTTP. STOMP широко поддерживается и хорошо подходит для использования через WebSocket и через Интернет.

Анна Кляйн
источник
13

WebSocket API позволяет веб-приложениям обрабатывать двунаправленную связь, тогда как STOMP - это простой текстовый протокол обмена сообщениями.

Протокол STOMP обычно используется внутри веб-сокета, когда веб-приложению необходимо поддерживать двунаправленную связь с веб-сервером.

Хороший учебник - STOMP Over WebSocket Джеффа Меснилла (2012).

STOMP также можно использовать без веб-сокета, например, через Telnet-соединение или через службу передачи сообщений.

И Raw WebSockets можно использовать без STOMP - например. Пример Spring Boot + WebSocket без STOMP и SockJs .

инттех
источник