Realtime: WebSocket, SSE или polling

Три способа делать «живое» обновление в вебе. Каждый со своей нишей. Чаще всего выбирают не тот.

Realtime: WebSocket, SSE или polling

«Сделай живое обновление» — типовая задача. Чат, биржевые котировки, нотификации. Три инструмента, и часто выбирают самый сложный из них.

Realtime: WebSocket, SSE или polling
WebSocket — двусторонний и сложный, SSE — серверный и простой.

WebSocket — двусторонний канал. Клиент и сервер свободно шлют сообщения. Нужен когда:

  • Чат, мессенджер.
  • Многопользовательская игра/доска.
  • Совместное редактирование.

Server-Sent Events (SSE) — однонаправленный поток с сервера. Простой, по обычному HTTP. Подходит когда:

  • Котировки, цены, статус заказа.
  • Стрим логов, прогресс задачи.
  • Любые «обновления от сервера», без ответных сообщений от клиента.

Long polling / short polling. Клиент периодически спрашивает «что нового». Костыль, но иногда подходит:

  • Старые корпоративные сети, где WS заблокирован.
  • Очень редкие обновления (раз в минуту), не оправдывает persistent connection.

Типовая ошибка — берут WebSocket для статуса заказа, потом мучаются с reconnect, heartbeat, состояниями. SSE справился бы и проще, и устойчивее.