Настройка модуля Push and Pull 1С-Битрикс
Онлайн-чат обновляется только при перезагрузке страницы. Уведомления о новом заказе приходят с задержкой в несколько минут. «Живая лента» в корпоративном портале Битрикс24 не обновляется в реальном времени. Всё это — последствия отсутствия настроенного модуля Push and Pull, который обеспечивает двустороннюю коммуникацию между сервером и браузером.
Что делает модуль Push and Pull
Модуль pull (Битрикс-идентификатор: pull) обеспечивает серверный push событий на клиент. Технически реализован через несколько транспортов:
- WebSocket — постоянное соединение, минимальная задержка (1–5 мс)
- Long Polling — клиент держит HTTP-запрос открытым, сервер отвечает когда есть событие
- Server-Sent Events — однонаправленный поток от сервера
Выбор транспорта происходит автоматически. Для WebSocket нужен отдельный NodeJS-сервер, поставляемый в составе Bitrix VM или устанавливаемый отдельно.
Установка и активация модуля
В административной панели: «Marketplace» → «Установленные решения» → найти модуль push and pull. Если не установлен — «Marketplace» → «Все решения» → поиск «Push and Pull».
После установки в /bitrix/modules/pull/ появляется модуль. Настройки: «Настройки» → «Настройки продукта» → «Push and Pull».
Ключевые параметры модуля:
-
Сервер Push — адрес NodeJS Push-сервера (например,
http://localhost:9010) - Сервер Pull (Long Polling) — адрес для long polling (может быть тот же)
- Ключ безопасности — shared secret для подписи сообщений
Конфигурация через b_option
Настройки хранятся в таблице b_option, модуль pull:
SELECT * FROM b_option WHERE MODULE_ID = 'pull';
Ключевые параметры:
-
PUSH_ENABLE— включение push-уведомлений -
PULL_SERVER_ENABLED— включение pull-сервера -
PUSH_SERVER_URL— URL NodeJS push-сервера -
PULL_SERVER_URL— URL pull-сервера -
PUSH_SECURITY_KEY— ключ безопасности
Long Polling без NodeJS
Если NodeJS не установлен, модуль работает в режиме Long Polling через PHP. Для этого нужно настроить отдельный location в Nginx, который будет держать соединения:
location ^~ /bitrix/pub/ {
proxy_pass http://127.0.0.1:9000; # PHP-FPM
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_read_timeout 25;
proxy_send_timeout 25;
# Не буферизировать ответ — отдавать сразу
proxy_buffering off;
proxy_cache off;
}
Путь /bitrix/pub/ — стандартный endpoint для pull-запросов в Битрикс.
Проверка работы
В браузере открыть DevTools → Network. Найти запрос к /bitrix/pub/ или к push-серверу. Он должен висеть открытым (pending) — это и есть long polling или SSE соединение.
Из PHP отправить тестовое событие:
use Bitrix\Pull\Event;
use Bitrix\Pull\Push;
// Отправить событие конкретному пользователю
$push = new Push(1); // userId = 1
$push->addUser(1);
$push->setMessage([
'module_id' => 'im',
'command' => 'test',
'params' => ['text' => 'Тестовое сообщение']
]);
$push->send();
// Через статический метод
\CPullWatch::AddToStack('TEST_CHANNEL', [
'module_id' => 'main',
'command' => 'test',
'params' => []
]);
\CPullStack::Send();
Типовые проблемы
Канал не подключается, ошибка 502. NodeJS push-сервер не запущен или упал. Проверить:
systemctl status push-server
# или
ps aux | grep node
Long polling работает, но задержка большая. proxy_read_timeout в Nginx меньше 20 секунд — Nginx разрывает соединение до ответа сервера. Клиент тут же переподключается, создавая лишнюю нагрузку.
Соединений слишком много, worker_connections переполнен. При 1000 онлайн-пользователях — 1000 висящих HTTP-соединений. Нужно увеличить worker_connections в Nginx и системный лимит открытых файлов:
# /etc/security/limits.conf
nginx soft nofile 65535
nginx hard nofile 65535
# Nginx
events {
worker_connections 8192;
use epoll;
multi_accept on;
}
Сообщения теряются при рестарте PHP-FPM. Очередь событий b_pull_stack в базе очищается агентом. При рестарте FPM агенты не выполняются — события накапливаются. После рестарта выполнить вручную или настроить cron для агентов Битрикс.







