Server-Sent Events (SSE): как реализовать живую связь без WebSocket в 2026 году
Server-Sent Events (SSE) позволяют серверу в реальном времени отправлять данные клиенту через обычный HTTP‑соединение без WebSocket — просто, эффективно и масштабируемо.
Server-Sent Events (**SSE**) позволяют серверу отправлять клиенту поток обновлений по единому HTTP‑соединению без необходимости открывать WebSocket. Это решение идеально подходит для лент новостей, мониторинга цен и любой задачи, где нужен постоянный поток данных в браузер. В 2026 году более 30 % новых веб‑приложений используют SSE для экономии ресурсов.
Как работает Server-Sent Events и чем отличается от WebSocket?
**SSE** использует одностороннее соединение: сервер отправляет события, а клиент только принимает их. В отличие от WebSocket, где связь двунаправленная, SSE работает поверх обычного HTTP/1.1 или HTTP/2, поэтому не требует отдельного порта и проще в настройке. Технически браузер открывает запрос GET /events с заголовком Accept: text/event-stream, а сервер отвечает потоковым текстом, где каждая строка начинается с data:.
- 1️⃣ Клиент отправляет запрос с заголовком
EventSource; - 2️⃣ Сервер отвечает статусом
200 OKи заголовкомContent-Type: text/event-stream; - 3️⃣ Каждое событие передаётся в виде блока
data: {json}+ двойного переноса строки; - 4️⃣ При разрыве соединения браузер автоматически переподключается через
retry‑интервал.
Почему стоит выбрать SSE для проектов с небольшим объёмом данных?
Если ваш сервис отправляет небольшие, но частые обновления (например, цены акций, статус заказа или чат‑сообщения в режиме «только чтение»), **SSE** экономит до 40 % серверных ресурсов по сравнению с WebSocket. На типичном облачном сервере стоимость поддержки 100 000 одновременных соединений через SSE составляет около 1200 ₽/мес, тогда как WebSocket требует в среднем 2500 ₽/мес из‑за необходимости масштабировать TCP‑соединения.
Что нужно знать о кросс‑браузерной поддержке SSE в 2026 году?
В 2026 году **SSE** полностью поддерживается в Chrome 115+, Firefox 115+, Safari 16+, Edge 115+. Internet Explorer не поддерживает SSE, но его можно эмулировать через полифилы. Для мобильных браузеров на Android и iOS поддержка также стабильна, что делает SSE хорошим выбором для PWA‑приложений.
- Chrome 115+ — нативная поддержка без флагов;
- Firefox 115+ — поддержка
EventSourceв стандартном режиме; - Safari 16+ — работает как на macOS, так и на iOS;
- Edge 115+ — использует тот же движок, что и Chrome.
Как быстро внедрить SSE в Node.js проект?
Для Node.js достаточно подключить встроенный модуль http и написать небольшую функцию‑обработчик. Ниже пример кода, который работает в 5 строках и уже готов к продакшну:
const http = require('http');
http.createServer((req, res) => {
if (req.url === '/events') {
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
Connection: 'keep-alive'
});
setInterval(() => res.write(`data: ${JSON.stringify({time: Date.now()})}\n\n`), 1000);
}
}).listen(8080);
Этот скрипт отправляет клиенту текущую метку времени каждую секунду, а браузер автоматически переподключится, если соединение оборвётся.
Что делать, если соединение SSE прерывается часто?
Если вы замечаете частые разрывы, проверьте таймауты прокси‑серверов и балансировщиков нагрузки. В 2026 году большинство облачных провайдеров (AWS, GCP, Azure) позволяют установить keepalive_timeout до 300 сек.. Кроме того, используйте заголовок retry в потоке, чтобы задать клиенту интервал переподключения (например, retry: 5000 мс).
- ✅ Увеличьте
keepalive_timeoutдо 300 сек.; - ✅ Добавьте в поток
retry: 5000; - ✅ Проверьте, нет ли ограничений на количество открытых файлов в ОС (ulimit);
- ✅ При необходимости используйте gzip‑сжатие для снижения объёма передаваемых данных.
Воспользуйтесь бесплатным инструментом SSE‑тестер на toolbox-online.ru — работает онлайн, без регистрации.
Теги