Модуль Push and Pull позволяет организовать транспорт для отправки мгновенных команд. Реализация данного функционала в виде отдельного модуля позволяет любому другому модулю (в том числе и модулям сторонних разработчиков) используя API отправлять мгновенные нотификации и сообщения клиентам.

Работа этого модуля требуется для обеспечения полной функциональности модулей Мобильные приложения, Блоги и Веб-мессенджер.

Модуль использует технологии:

Pull (англ. long-polling, англ. simple pull) - технология сетевой коммуникации, при которой первоначальный запрос данных производится клиентом, а ответ порождается сервером.

Технология Pull — эффективный и экономичный способ для открытого вещания широкому кругу неизвестных потенциальных клиентов. Он наиболее эффективен для клиента, ищущего специфический элемент. Pull-запросы составляют базовую основу сетевых вычислений, когда множество клиентов запрашивают данные с централизованых серверов. Так же, pull широко используется в сети Интернет для HTTP-запросов страниц на web-сайтах.

Противоположностью ей является технология Push.

Push (англ. Push, дословно — «продавливание» или «продвижение»), (также известен как webcasting или netcasting) - один из вариантов распространения контента в Интернете, когда информация поступает от сервера к клиенту на основе ряда параметров, установленных клиентом.

Обычный пользователь может подписаться на различные темы, информацию от контент-провайдера, и каждый раз новое обновление формируется на сервере, это обновление "продвигается" на компьютер либо смартфон пользователя.

Примечание: Если при просмотре ленты у пользователя вместо правильного текста появляются нечитаемые символы, то скорее всего в браузере жестко указана какая-либо кодировка. Необходимо указать автоматический выбор кодировки (Вид > Кодировка > Авто).

Как работает Push and Pull

На серверной стороне поддержка мгновенных сообщений осуществляется модулем NGINX: nginx-push-stream-module. Данный модуль обеспечивает поддержку long-polling соединений с клиентами и доставку опубликованных им сообщений.

Примечание: Bitrix Framework и без модуля nginx-push-stream-module обеспечивает достаточно высокую скорость передачи сообщений: 60 секунд интервал, при наличии сообщений интервал между соединениями уменьшается до 10 секунд.

При открытии страницы клиент ajax-запросом, подключается к своему каналу на одном из портов NGINX: 8893 (http) или 8894 (https). (В случае использования виртуальной машины BitrixVM. При использовании собственной конфигурации сервера администратор волен использовать любые удобные ему порты.) С данного порта NGINX перенаправляет пользователя на внутренний сервер очередей (доступный только по 127.0.0.1:8895), где проверятся наличие канала пользователя и новых сообщений. В случае если в канале нет сообщений, сервер не отдает ответ, а держит соединение в течение 40 сек.

Если в течение этого времени в канал пользователя придет новое сообщение, то сервер отправит его клиенту и закроет соединение. В случае если в канал пользователя не будет новых сообщений в течение 40 секунд, то сервер разорвет соединение и отправит ему заголовок: 304 Not Modified.

После получения ответа сервера и закрытия соединения клиент выполнит повторное подключение к каналу с новой датой последнего изменения.

Сообщения в канал пользователя публикуются посредством вызова соответствующих методов API модуля Push and Pull.

Для работы с мгновенными сообщениями рекомендуем использовать протокол https.

Примечание: Большое значение имеет правильная синхронизация времени сервера с глобальными серверами.

Настройка модуля

При использовании продуктов Bitrix Framework на базе виртуальной машины BitrixVM либо BitrixEnvironment с v. 5.0 необходимости в настройке модуля нет: всё работает "из коробки". Если проект используется не на штатных средствах установки Bitrix Framework, то необходимо произвести дополнительные настройки.

Примечание: Приведённые ниже образцы настроек даны для примера. Настройку под конкретный проект, при отказе от использования рекомендуемых BitrixVM или BitrixEnvironment, администратор должен произвести самостоятельно.

Внимание! Работа модуля Push and Pull поддерживается только до версии 0.5 nginx-push-stream-module. Более свежии версии не поддерживаются, так как для работы Push and Pull разрабатывается специальное решение от "1С-Битрикс".

Примечание: С версии 14.1.2 добавлена поддержка WebSocket, для активации опции необходима поддержка опции на "Сервере очередей".

Внимание! Если у вас появляется ошибка вида:
XMLHttpRequest cannot load 
http://example.com:8893/bitrix/sub/?CHANNEL_ID=<уникальный_адрес_канала>&tag=1&rnd=1380619831146. 
Origin http://example.com is not allowed by Access-Control-Allow-Origin.
то, значит вы используете версию модуля nginx push stream module до 0.3.4.

Необходимо: либо обновить версию модуля, либо закомментировать строки:

add_header "Access-Control-Allow-Origin" "*";
add_header "Access-Control-Allow-Headers" "if-modified-since, origin, if-none-match";