
SSE в production: почему нативного EventSource недостаточно и что с этим делать
FlameFront-end 29 минут назад SSE в production: почему нативного EventSource недостаточно и что с этим делать Средний 9 мин 1.1K TypeScript * JavaScript * ReactJS * Из песочницы ВведениеГод назад я строил real-time слой...
GPT-5.6 31 Temmuz 2026'da yayınlanacak mı?
Значимый прорыв формирует отрасль ИИ: FlameFront-end 29 минут назад SSE в production: почему нативного EventSource недостаточно и что с этим делать Средний 9 мин 1. 1K TypeScript * JavaScript * ReactJS * Из песочницы ВведениеГод назад я строил real-time слой для AI SaaS-платформы. Корпоративные клиенты, AI-чаты со стримингом ответов, несколько вкладок открытых одновременно — типичный сценарий для подобного продукта.
Выбор пал на SSE: в отличие от WebSocket, SSE работает поверх обычного HTTP, хорошо дружит с прокси и балансировщиками, и для однонаправленного стриминга от сервера к клиенту это достаточно. Нативный EventSource подключил быстро. Потом начались проблемы.
Технические детали
Первая — авторизация. EventSource не умеет слать заголовки. Единственный способ передать токен — query-параметр в URL, что для корпоративного продукта просто не вариант.
Нативный API возвращает MessageEvent без какой-либо типизации полезной нагрузки. Весь парсинг и приведение типов — на совести разработчика. EventSource реконнектится, но без контроля: нет jitter, нет exponential backoff, нет ограничения попыток.
Сервер упал — клиенты начинают переподключаться одновременно, создавая thundering herd. Каждая вкладка открывает своё соединение. Три вкладки — три потока на сервер от одного пользователя.
Отраслевые последствия
При корпоративных клиентах которые держат продукт открытым весь рабочий день это ощутимо. Но со временем этот код стал самым хрупким местом в приложении — гонки, ручной leader election, reconnect-планировщик, счётчики попыток. Когда что-то шло не так — открывал пять файлов и час разбирался где потерялся event.
Когда искал готовую библиотеку которая решает всё это — не нашёл. Либо слишком простые обёртки над EventSource, либо привязка к конкретному фреймворку, либо отсутствие типизации. Так появился sse-runtime.
Архитектура sse-runtimeБиблиотека состоит из трёх npm-пакетов под @flamefrontend/* скоупом:@flamefrontend/sse-runtime-core — framework-agnostic ядро, zero runtime dependencies @flamefrontend/sse-runtime-react — React-адаптер: useSSE хук и SSEProvider @flamefrontend/sse-runtime-devtools — DevTools-панель для инспекции соединенийТакое разделение намеренное. Core не зависит ни от чего — ни от React, ни от каких-либо сторонних библиотек. Весь runtime построен на браузерных нативных API: fetch, ReadableStream, AbortController, TextDecoder, BroadcastChannel, Web Locks.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





