Настройка модуля Push and Pull 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка модуля Push and Pull 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка модуля 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 для агентов Битрикс.