Перейти к основному содержимому

Server-Sent Events (SSE)

Server-Sent Events (SSE) — технология, при которой сервер отправляет клиенту обновления по мере их появления. Клиенту не нужно отправлять повторяющиеся запросы. Соединение одностороннее: от сервера к клиенту.

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

Как работает

  • Клиент делает HTTP-запрос на сервер и остается подключенным к серверу.
  • Сервер открывает однонаправленный поток данных, отправляет обновления на клиент в формате текстовых событий.
  • Онлайн клиент получает данные по мере их поступления с сервера.

Где применяется

Когда сервер должен регулярно обновлять информацию на веб-странице. Например:

  • в системах мониторинга (получение обновлений о состоянии системы)
  • чатах (получение новых сообщений)
  • торговых приложениях (обновления котировок)
  • лентах новостей и социальных сетях
  • push-уведомлениях из веб-приложения

Пример работы SSE для мониторинга системы

  • Сервер отслеживает метрики системы (загрузка CPU, ошибки, статус сервера)
  • Клиент подключается через SSE и получает обновления об изменении состояния системы в реальном времени
  • Как только сервер получает новые данные, он отправляет их клиенту

Плюсы и минусы

Плюсы:

  • Интегрируется через стандартные HTTP-запросы
  • Только сервер инициирует обновления, не нужно постоянно отправлять запросы от клиента на сервер (polling). Это снижает нагрузку
  • Автоматически восстанавливает соединение при его потере

Минусы:

  • Однонаправленность — только от сервера к клиенту
  • Работает только через HTTP, менее гибко по сравнению с WebSocket
  • Может не поддерживаться старыми браузерами (работает только с UTF-8)
  • Нет возможности передать свои заголовки в запрос

SSE vs WebSocket

  • SSE — односторонняя технология

  • WebSocket — двусторонняя, для обмена данными без перезагрузки страницы

  • SSE работает по HTTP/HTTPS, соединение открывается через браузер

  • WebSocket — через протоколы ws:// или wss:// для установки соединения, далее связь держится на постоянной основе

SSE vs AJAX

  • SSE держит открытым одно направление связи, при этом сервер инициирует отправку данных
  • AJAX требует периодических запросов от клиента (Polling) для обновления данных. Происходит без обновления страницы

Подборка материалов

  1. Асинхронный веб: WebSocket, Server-Sent Events, Long Polling и Short Polling
  2. Подписки на GraphQL: Почему мы используем SSE/Fetch вместо Websockets
  3. Вам посылка, или Как мы доставляем сообщения с сервера на клиент в реальном времени
  4. Server-Sent Events: пример использования
  5. Потоковое обновление с событиями, отправленными сервером
  6. Server Sent Events
  7. WebSockets vs SSE: особенности и сценарии использования
  8. HTTP, Server Sent Events (SSE), Websockets и Long Polling
  9. Server-Sent Events | WebSocket или SSE | Опрос сервера
  10. Аутентификация для WebSocket и SSE: до сих пор нет стандарта?
  11. Server-Sent Events в Java. От любви до ненависти…
  12. Как работает JS: WebSocket и HTTP/2+SSE. Что выбрать?
  13. AJAX для новичков
  14. Использование SSE вместо WebSockets для однонаправленного потока данных через HTTP / 2

Посты из нашего канала

  1. WebSocket: что это, когда следует использовать и какие преимущества дает
  2. Способы асинхронного взаимодействия в API
  3. HTTP. Краткие советы по использованию протокола
  4. HTTP. Что нужно знать аналитику

Видео

  1. Server-Sent Events: Простая замена веб-сокетам
  2. Server-sent events (HTML5). Замена ли для веб-сокетов?
  3. Server-Sent Events: Снимаем ограничения
  4. SSE - передача данных от сервера к клиенту

Книги

  1. Сергей Константинов. API
  2. Джей Гивакс. Паттерны проектирования API
  3. Арно Лоре. Проектирование веб-API