Server-Sent Events (SSE)

Бывало у вас так: на проекте есть задача в реальном времени, но техлид или инфраструктура или ИБ накладывают табу на WebSocket? Со мной такое случилось! Есть задача сделать sorry, NDA, а использовать вебсокеты — нельзя. Долго думал, как обойтись, и решение нашлось в виде SSE (Server-Sent Events).

Делюсь забытой технологией древних.

Что это такое? SSE — это стандарт, позволяющий серверу автоматически «проталкивать» (push) данные клиенту (например, браузеру) через одно постоянное HTTP-соединение. Клиент просто подписывается на событие и ждет обновлений.

Как выглядит на практике? Сервер отправляет данные в специальном текстовом формате, а клиент (JavaScript) ловит их через объект EventSource. Это очень просто реализовать.

SSE vs WebSocket: В чем разница? Частая ошибка — ставить их в один ряд. Они решают разные задачи!

Server-Sent Events (SSE) — это как радио. Сервер «вещает» данные, а клиент их «ловит». ▫️Связь односторонняя (только Server → Client) ▫️Работает поверх обычного HTTP(S ▫️Супер-фича: если соединение падает, клиент автоматически переподключается ▫️Отправляет только текстовые данные (чаще всего JSON).

WebSocket — это как телефонный звонок. Устанавливается полноценное двустороннее соединение (Server ⇄ Client). ▫️Свой специальный протокол ▫️Можно пересылать что угодно: текст, бинарные данные, файлы ▫️За эту мощь и функциональность приходится платить: переподключение и обработку ошибок нужно писать вручную ▫️Реализация сложнее

😎Когда использовать SSE? SSE идеален для сценариев, где данные идут в основном в одну сторону — от сервера к клиенту.

Примеры: 〰️Лента уведомлений (новое сообщение, комментарий, лайк) 〰️Онлайн-датчики и мониторинг (курс акций, температура процессора) 〰️Ленты новостей / Таймлайны в реальном времени 〰️Статус длительной задачи (прогресс загрузки файла) 〰️Dashboard-ы, которые должны обновляться сами

😃Когда выбрать WebSocket? WebSocket — ваш выбор, когда нужна полноценная двусторонняя связь в реальном времени.

Примеры: 〰️Чаты и мессенджеры (нужно не только получать, но и отправлять сообщения мгновенно) 〰️Онлайн-игры 〰️Совместное редактирование документов 〰️Сервисы видеозвонков

Итого Не тянем за собой тяжелый WebSocket, если задача решается легким SSE. Правильный выбор технологии: ▫️Экономит ресурсы на разработку и поддержку. ▫️Повышает надежность (SSE проще и отказоустойчивее за счет HTTP). ▫️Делает архитектуру подходящей под задачу.

Байт на комментарии: В каком из проектов вашей компании можно применить SSE прямо сейчас?

Server-Sent Events (SSE)
Бывало у вас так: на проекте есть задача в реальном времени, но техлид или инфраструктура или ИБ накладывают табу на WebSocket?
Со мной такое случилось!
Есть задача сделать so... | Сетка — социальная сеть от hh.ru