Статьи

Мысли об отправленных сервером событиях, HTTP / 2 и посланнике

В распределенной системе эффективное перемещение данных между службами — задача не из легких. Это может быть особенно сложно для веб-приложения внешнего интерфейса, которое опирается на опрос данных из многих внутренних служб.

Недавно я исследовал решения этой проблемы для Gray Matter, в  частности, как мы могли бы уменьшить трафик для некоторых наиболее востребованных сервисов в нашей сети. Наше веб-приложение имело следующие характеристики:

  • Опросы сервисов на обновления каждые 5 секунд.

  • Не нуждается в двунаправленной связи.

  • Не нужно поддерживать устаревшие браузеры.

  • Общается со службами через прокси на основе посланника.

Я посмотрел на два серверных решения — WebSockets и Server-Sent Events (SSE). В конце концов, я понял, что WebSockets был излишним для нашего случая использования, и решил сосредоточиться на SSE, главным образом потому, что это просто старый HTTP и позволяет нам использовать некоторые действительно интересные функции HTTP / 2.

Быстрый учебник по SSE

SSE является частью стандарта HTML5 EventSource и в основном просто предоставляет нам API для управления и анализа событий из длительных HTTP-соединений.

Для реализации клиента SSE создайте экземпляр объекта EventSource и начните прослушивать события. Когда этот код загружается в браузер, он открывает TCP-соединение и отправляет HTTP-запрос на сервер, сообщая ему о необходимости отправлять события в очередь, когда они у них есть. Мы даже можем слушать нестандартные события, такие как шутки пап:


JavaScript