Отправка уведомлений клиенту с сервера Spring Boot

Рейтинг: 0Ответов: 1Опубликовано: 08.04.2023

Есть небольшое приложение.

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

Понял что есть Websocket-ы и Server Sent Event.
Что из них предпочтительнее использовать или может быть есть другие возможности?

Ответы

▲ 4Принят

Коротко

Если нужно

  • не только отправлять данные с сервера в браузер, но и с браузера в сервер по тому же каналу
  • отправлять не только текстовые форматы данных, но и бинарные
  • ограничение на количество подключений недопустимо

то нужно использовать вебсокеты

Если нужно

  • работать в корпоративных сетых
  • можно ограничиться только связью сервер -> клиент
  • нужно использовать только стандартный протокол HTTP

то можно использовать SSE


Подробнее

Вебсокеты позволяют как получать в браузере данные с сервера так и отправлять их.

SSE(Server Sent Events) в свою очередь помогают только отправлять данные с сервера в браузер.

Преимущества SSE над вебсокетами:

  • Передается по стандартному HTTP протоколу
  • Может быть подхвачен JavaScript'ом в браузерах с отсутствующей поддержкой SSE
  • Встроенная поддержка переподключения и определения события
  • Более простой протокол
  • Нет проблем с корпоративными фаерволами

Преимущества вебсокетов над SSE:

  • Двунаправленная связь в режиме реального времени
  • Нативная поддержка в большинстве браузеров
  • Передача бинарных данных

Наиболее подходящим пример использования вебсокетов:

  • Онлайн-чат.

Наиболее подходящие примеры использования SSE:

  • Потоковая передача изменений биржевых котировок
  • Обновление ленты Твиттера
  • Уведомления в браузере

Недостатки SSE:

  • Нет поддержки бинарных данных
  • Имеется ограничение на максимальное число подключений

Ограничение на количество подключений SSE:

SSE имеет ограничение на максимальное число подключений со стороны клиента.
Данное ограничение может быть особенно неприятным, потому что оно очень маленькое (максимум 6 подключений одновременно), что может вызывать проблемы при открытии множество вкладок одного и того же сервиса.
При этом данная проблема в Chrome и Firefox отмечена как "Won't fix", что говорит о том, что данное обстоятельство в будущем никак не изменится к лучшему.
Ограничение распространяется на связку <Браузер> + <Домен>, поэтому его можно обойти используя разные доменные имена. Например: 6 подключений к домену test1.ru и 6 подключений к домену test2.ru

Источник: https://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource