HTTP Long Polling


HTTP Long Polling (или Server-Sent Events) — технология и способ взаимодействия между клиентом и сервером. Long Polling предполагает установление постоянного соединения между клиентом и сервером.
Клиент-серверная модель в стандартном виде подразумевает, что инициатором любого обмена данными является клиент. Сервер всегда находится в сети и работает, отдавая контент только тогда когда к нему обращается клиент.



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


Реализовать это позволяет HTTP Long Poling.



Модель HTTP Long Polling


HTTP Long Poling в общем работает следующим образом:

1. Клиент обращается к серверу с запросом


HTTP Long Polling


2. Сервер предоставляет ответ, оставляя при этом соединение открытым


Long Polling - установление канала


3. Как только на сервер поступает новая информация, адресованная клиенту, информация направляется к нему используя открытое соединение. Пакеты, отправляемые таким образом называются push notifications


push notifications



Как только клиент получает информацию, он вновь отправляет запрос и устанавливая соединение с сервером, далее процесс повторяется.

Фактически, создается подобие модели при которой запросы генерируются сервером. Клиент всегда готов принимать HTTP запросы, которые отправляет сервер.



При использовании Server-Sent Events (HTTP Long Poling) в приложении всегда возникает ряд моментов и потенциальных сложностей, основные из них


  • Использование WiFI и сетей мобильных операторов с постоянным переключением между ними — при этом меняется IP адрес и разрывается соединение
  • Сообщения могут теряться если клиент недоступен, система должна быть организована так, чтобы все сообщения доходили, при этом в нужном порядке
  • Балансировка нагрузки между серверами, обеспечивающими Long Poling


Все задачи можно реализовать самостоятельно или воспользоваться готовыми решениями, некоторые провайдеры предлагают потоковые стриминговые сети, способные обрабатывать большие объемы данных в режиме реального времени.


Приложения, требующие использования технологий передачи данных, инициализируемых сервером обычно используют AJAX запросы Javascript или написаны на Ruby/Python.

Сказать спасибо