У чому різниця між протоколами WebSocket та STOMP?


Відповіді:


91

Це питання схоже на запитання різниці між TCP та HTTP. Я все одно спробую розглянути ваше запитання, і це цілком природно заплутатися між цими двома термінами, якщо ви починаєте.

Коротка відповідь

STOMP походить від WebSockets. STOMP лише згадує кілька конкретних способів обміну фреймами повідомлень між клієнтом та сервером за допомогою WebSockets.


Довга відповідь

WebSockets

Це специфікація, яка забезпечує синхронний двоспрямований зв’язок між клієнтом та сервером. Хоча подібний до сокетів TCP, це протокол, який працює як оновлене HTTP-з'єднання, обмінюючись кадрами змінної довжини між двома сторонами, замість потоку.

ТОМП

Він визначає протокол для взаємодії клієнтів та серверів із семантикою обміну повідомленнями. Він не визначає жодних деталей реалізації, а навпаки, звертається до простого у реалізації дротового протоколу для інтеграції обміну повідомленнями. Він забезпечує вищу семантику поверх протоколу WebSockets і визначає кілька типів кадрів, які відображаються на кадрах WebSockets. Деякі з цих типів є ...

  • підключити
  • передплатити
  • відписатися
  • відправити (повідомлення, відправлені на сервер)
  • повідомлення (для повідомлень, що надсилаються з сервера) BEGIN, COMMIT, ROLLBACK (управління транзакціями)

ви мали на увазі асинхронний?
Анатолій Степанюк

25

WebSocket передбачає архітектуру обміну повідомленнями, але не вимагає використання будь-якого конкретного протоколу обміну повідомленнями. Це дуже тонкий шар над TCP, який перетворює потік байтів у потік повідомлень (або текстових, або двійкових) і не набагато більше. Інтерпретація значення повідомлення залежить від додатків.

На відміну від HTTP, який є протоколом на рівні програми, у протоколі WebSocket у вхідному повідомленні просто недостатньо інформації для фреймворку або контейнера, щоб знати, як його направити або обробити. Тому WebSocket, мабуть, занадто низький рівень для будь-чого, окрім дуже тривіального додатка. Це можна зробити, але це, швидше за все, призведе до створення рамки зверху. Це можна порівняти з тим, як сьогодні написано більшість веб-програм, використовуючи веб-фреймворк, а не лише сервлет API.

З цієї причини WebSocket RFC визначає використання підпротоколів. Під час рукостискання клієнт і сервер можуть використовувати заголовок Sec-WebSocket-Protocol для узгодження підпротоколу, тобто протоколу вищого рівня, що використовується. Використання підпротоколу не потрібно, але навіть якщо він не використовується, програмам все одно потрібно буде вибрати формат повідомлення, який зможуть зрозуміти і клієнт, і сервер. Цей формат може бути спеціальним, специфічним для фреймворку або стандартним протоколом обміну повідомленнями.

STOMP  - простий протокол обміну повідомленнями, спочатку створений для використання в мовах сценаріїв із фреймами, натхненними HTTP. STOMP широко підтримується і добре підходить для використання через WebSocket та через Інтернет.


13

API WebSocket дозволяє веб-додаткам обробляти двосторонні комунікації, тоді як STOMP - це простий протокол обміну повідомленнями, орієнтований на текст.

Протокол STOMP зазвичай використовується всередині веб-сокета, коли веб-програма повинна підтримувати двосторонню комунікацію з веб-сервером.

Хорошим підручником є STOMP Over WebSocket від Джеффа Месніла (2012)

STOMP також можна використовувати без веб-розетки, наприклад, через з'єднання Telnet або службу посередницьких повідомлень.

А Raw WebSockets можна використовувати без STOMP - Напр. Приклад Spring Boot + WebSocket без STOMP та SockJ .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.