Перейти к содержанию

Обновления в реальном времени с Server-Sent Events (SSE)

Начало урока

Обновления в реальном времени с Server-Sent Events (SSE)

Лёгкий односторонний канал для живых данных поверх обычного HTTP

Главная идея: Server-Sent Events (SSE) позволяют серверу отправлять клиенту непрерывный поток обновлений через один длительный HTTP-ответ. Нет нового протокола и нет рукопожатия с апгрейдом: это обычный HTTP, тело которого имеет тип text/event-stream и просто никогда не заканчивается. Для дашбордов, уведомлений, биржевых тикеров и индикаторов прогресса -- везде, где данные текут сервер -> клиент и почти никогда обратно -- SSE зачастую проще и надёжнее полноценного WebSocket. С WebSocket вы уже познакомились в этом курсе; здесь вы получаете более лёгкий инструмент для многих односторонних случаев.
К концу урока вы сможете:
  • объяснить, как SSE передаёт события через один keep-alive HTTP-ответ;
  • писать формат text/event-stream -- поля id, event, data, retry и комментарии;
  • принимать поток в браузере через EventSource и именованные события;
  • использовать автоматическое переподключение и Last-Event-ID, чтобы возобновляться без пропусков;
  • поддерживать соединение живым с помощью heartbeat и побеждать буферизацию прокси;
  • честно решать, когда подходит SSE, а когда WebSocket.

1. Что такое SSE и зачем это нужно

Классический способ получать свежие данные с сервера -- это опрос (polling): клиент каждые несколько секунд спрашивает "есть что-то новое?". Опрос тратит запросы, когда ничего не изменилось, и всё равно добавляет задержку, когда изменение появляется. SSE переворачивает это. Клиент открывает соединение один раз, а сервер держит этот ответ открытым и записывает в него новые события по мере их появления. Браузер предоставляет для этого крошечный встроенный API под названием EventSource.

Поскольку транспорт -- это обычный HTTP, SSE наследует всё, что HTTP уже даёт: он работает через тот же порт, что и ваше веб-приложение, проходит через файрволы и прокси, разрешающие обычный веб-трафик, и легко защищается TLS и cookie. Не нужно открывать в инфраструктуре отдельный протокол.

Аналогия. Опрос -- это как звонить на вокзал каждую минуту и спрашивать, не опаздывает ли поезд. SSE -- это радиотрансляция: вы настраиваетесь один раз, и объявления приходят по мере событий. По радио вы не отвечаете -- и для расписания это не нужно. Именно под эту одностороннюю форму и создан SSE.

SSE -- это стандарт браузера (часть HTML), поэтому клиентскую часть не нужно изобретать: переподключение, разбор событий и обработку Last-Event-ID за вас делает EventSource. Ваша задача на сервере -- лишь правильно говорить на простом формате.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя