Инструменты пользователя

Инструменты сайта


l:long_polling

Long polling

Long polling (длительный опрос) – способ запрашивать данные у сервера, при котором клиент ждёт достаточно долго появления этих самых данных в рамках одного соединения, если их в моменте на сервере в готовом виде нет.

Подход типичен для ситуаций, когда данные появляются на сервере в результате каких-то событий. Клиент отправляет запрос серверу и ожидает ответа. Если в рамках того или иного таймаута событие происходит и у сервера появляются данные для клиента, то он их возвращает. Если нет, то по истечении таймаута, сервер возвращает ответ о том, что данных нет.

С точки зрения сервера

С точки зрения сервера длительный опрос (длительный поллинг) может быть как чем-то дорогостоящим и ресурсоёмким, так и, наоборот, довольно дешёвым способом справляться с нагрузкой. Если сервер представляет собой java-приложение и крутится на Tomcat'е, то на каждый такой запрос будет выделен отдельный тред (поток исполнения). Это довольно дефицитный ресурс и держать одновременно много таких соединений, вероятно, не лучший способ справляться с нагрузками.

Если сервер, например, NodeJS работает на основе цикла событий, то такой проблемы нет и для сервера в принципе будет более выгодным подолгу удерживать каждое соединение в ожидании данных для клиентов, чем отвечать на множество частых запросов при коротком поллинге.

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



Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki