Узнайте, что такое события, отправленные сервером, их работу, функции и ограничения.

Как правило, клиент и сервер взаимодействуют по модели «запрос-ответ».

Клиент отправляет запросы на сервер по мере необходимости. Сервер обрабатывает запрос и отвечает клиенту. В большинстве случаев это работает хорошо.

Теперь предположим, что клиент хочет получить информацию или уведомление от сервера без запроса. Например, клиенту необходимо знать обновления в реальном времени, генерируемые на сервере.

Первое, что приходит на ум, когда мы думаем о передаче данных с сервера клиенту в режиме реального времени, — это Long Polling или WebSocket.
Веб-сокеты поддерживают мультиплексную двунаправленную связь.

Здесь вы можете видеть, что после начального рукопожатия устанавливается полнодуплексное соединение с постоянным сокетом. Что, если все, что нам нужно, — это однонаправленная связь (от сервера к клиенту)? В этом случае использование WebSocket будет излишним.

Вот где в игру вступает SSE (Server-Sent Events).

Что такое события, отправленные сервером (SSE)?

SSE позволяет серверам передавать данные на веб-страницы по протоколу HTTP или с использованием выделенных серверных протоколов. Таким образом, с помощью SSE данные текстовых событий могут эффективно передаваться с сервера на клиент.

Работа SSE

SSE поддерживает реализацию потоковой передачи XHR, поэтому он может эффективно работать в разных браузерах. Когда сообщения доставляются, они отправляются через одно продолжительное HTTP-соединение. Вместо того, чтобы самостоятельно заниматься потоковой передачей XHR, браузер берет на себя все управление соединениями и анализ сообщений, позволяя приложению сосредоточиться на своей бизнес-логике! SSE упрощает управление данными в режиме реального времени. Давайте посмотрим поближе.

  1. Автор указывает ресурс в конструкторе Источник события, и браузер подключается к удаленному HTTP-серверу, чтобы запросить его.
  2. Сообщения от сервера приходят время от времени.
  3. При получении и отправке сообщений браузер обнаруживает, что он бездействует, за исключением случаев, когда это необходимо для поддержания TCP-соединения, и переходит в спящий режим, чтобы потреблять меньше энергии.
  4. Браузер отключается от сервера.
  5. Вместо того, чтобы поддерживать соединение напрямую, браузер связывается со службой push-прокси в сети.
  6. В службе push-прокси клиент связывается с удаленным сервером и запрашивает ресурс, указанный пользователем в конструкторе для источника события (возможно, включая HTTP-заголовок «Last-Event-ID» и т. д.).
  7. Браузер позволяет мобильному устройству перейти в спящий режим.
  8. С сервера отправлено новое сообщение.
  9. Используя «push-прокси», мобильное устройство получает событие с помощью такой технологии, как OMA push, которая пробуждается лишь ненадолго для обработки события, а затем снова переходит в спящий режим.

Особенности ССЕ

  • Доставка с низкой задержкой
  • Эффективный анализ сообщений браузера
  • Автоматическое отслеживание последнего просмотренного сообщения
  • Уведомления о клиентских сообщениях как события DOM

Ограничения SSE

  • Связь только от сервера к клиенту
  • Может передавать только данные UTF-8

Спасибо за прочтение 🙌🏼. Если вы нашли эту статью полезной, поставьте аплодисменты с помощью кнопки 👏 и поделитесь ею в своих кругах.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.