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 прямо сейчас?
· 11.09.2025
Хм, это интересно, уже хочу прикрутить к загрузке файлов. А что под капотом, нужен какой-то провайдер сообщений, вроде какого rabbitmq, или сервер сразу пуляет в клиентскую сторону данные, вроде вызова по hhtp, только в сторону клиента?
ответить
коммент удалён
· 11.09.2025
На бэке делаем какой-то sse-коннектор. Он будет управлять подключениями и пушами.
Коннектор подписывает клиента например на ветку рэбита. Или любого другого брокера.
Что-то в приложении произошло, оно складывает в брокер.
Коннектор читает топик и делает рассылку.
Без брокера можно, но это скорей для обучения, я бы тогда и от коннектора отказался, все на бэке высадил)
ответить
ответ удалён
· 11.09.2025
Ага, всё же брокер, тогда всё укладывается в картину. Спасибо))
ответить
ответ удалён