Перейти к содержанию

Сервер очередей доставляет команды из PHP на открытые страницы сайта. С его помощью браузер может показать новый статус задачи или обновить счетчик без перезагрузки. Модуль pull связывает приложение с сервером очередей. JavaScript-клиент получает команды, а обработчик на странице обновляет интерфейс.

Сервер очередей можно подключить из облака 1С-Битрикс или запустить в своей инфраструктуре. В обоих случаях настройка заканчивается одинаково. Команда, которая отправлена с сайта, должна дойти до открытой страницы.

Выбрать сервер

|

|| Вариант | Когда подходит | Что нужно || || Облачный сервер 1С-Битрикс | Можно подключаться к внешнему сервису, в том числе с виртуального хостинга | Активная лицензия и доступ к облачному серверу из PHP-приложения и браузера || || Локальный сервер очередей | Сервер очередей должен работать в собственной инфраструктуре | Серверное окружение, например BitrixVM, и возможность настроить его || |#

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

Внимание

Модуль Push and Pull недоступен в редакциях Старт и Стандарт.

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

Подключить облачный сервер

  1. Откройте страницу Настройки > Настройки продукта > Настройки модулей > Push and Pull в административном разделе.

  2. В поле Использовать «Push server» выберите облачный сервер 1С-Битрикс.

  3. Выберите расположение сервера или оставьте автоматический выбор.

  4. Нажмите Зарегистрироваться.

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

Далее переходите к разделу Проверить работу транспорта сообщений.

Подключить локальный сервер

Ниже — последовательность для BitrixVM. Если сервер очередей уже установлен и запущен в другом окружении, переходите к шагу Подключить сайт к серверу.

Запустить сервер в BitrixVM

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

  1. Откройте меню BitrixVM и выберите 6. Configure Push/RTC service for the pool.

  2. Выберите 1. Install/Update NodeJS RTC service.

  3. В поле Hostname укажите имя хоста, на котором нужно установить сервер очередей, и подтвердите установку.

  4. Дождитесь завершения задачи. Снова откройте раздел Push/RTC. В поле Type должно появиться NodeJS-PushServer.

Если задача не завершилась, проверьте ее состояние через 10. Background tasks in the pool > 1. View running tasks.

Подключить сайт к серверу

  1. Откройте Настройки > Настройки продукта > Настройки модулей > Push and Pull.

  2. В поле Использовать «Push server» выберите сервер, который установлен локально.

  3. Выберите локальный сервер очередей.

  4. Проверьте адреса и код-подпись по таблице ниже.

  5. Если в установке несколько сайтов, убедитесь, что нужного сайта нет в списке Не использовать модуль на сайтах.

  6. Сохраните настройки.

Проверить адреса и код-подпись

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

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

|

|| Настройка | Что проверить || || Путь для публикации команд со стороны сервера | Адрес принимает команды от PHP-приложения и доступен с сервера сайта || || Код-подпись для взаимодействия с сервером | Значение совпадает с security.key в конфигурации сервера очередей || || Путь для чтения команд | Браузер может обратиться к этому адресу. Для HTTPS-сайта задан защищенный адрес || || Путь для чтения команд через WebSocket | Для HTTPS-сайта используется wss://, сертификат соответствует домену подключения || || Путь для публикации команд со стороны клиента | Соответствует конфигурации сервера, если приложение использует клиентскую публикацию. Он не заменяет адрес отправки из PHP || || Путь для выполнения JSON-RPC запросов | Адрес для запросов PHP-приложения к серверу очередей по протоколу JSON-RPC, в том числе для публикации команд. Если установка использует этот протокол, адрес должен соответствовать конфигурации сервера и быть доступен с сервера сайта || |#

Ключ сервера указан в секции security, параметре key файлов /etc/push-server/push-server*.json. В BitrixVM он создается и передается в настройки сайта автоматически. Если ключ в модуле отличается от ключа сервера, команды не будут доставляться.

Адрес чтения должен быть доступен браузеру. Внутренний адрес, доступный только серверу сайта, для этого не подходит. Маркер #DOMAIN# в адресе автоматически заменяется доменом сайта. Если используется этот маркер, проверьте подключение на каждом домене сайта.

После сохранения повторно откройте форму и убедитесь, что выбранный сервер и параметры сохранились. Теперь можно проверить доставку.

Проверить работу транспорта сообщений

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

Отправить контрольную команду

На действующем сайте используйте существующий сценарий, который получает обновления через Push and Pull. Например, измените статус, который должен обновиться на другой открытой странице. Выполните действие и проверьте, обновился ли интерфейс без перезагрузки.

Для отдельной проверки подготовьте пример из статьи Обновление страницы по команде сервера:

  1. Добавьте обработчик зависимости OnGetDependentModule в /local/php_interface/init.php.

  2. Создайте страницу получателя /local/pull-demo/index.php и отправителя /local/pull-demo/send.php по коду статьи.

  3. Откройте обе страницы под одним пользователем. На получателе дождитесь появления надписи «Обработчик reportReady зарегистрирован».

  4. Отправьте команду через форму на второй странице.

  5. Вернитесь к получателю без перезагрузки.

Ожидаемый результат. Текст изменился на Отчет 42 готов., счетчик полученных команд увеличился. Повторная отправка должна снова увеличить счетчик.

Учебный пример сначала запускайте на тестовой копии. Для проверки на действующем сайте ограничьте доступ к учебным страницам тестовыми учетными записями и выполните условия по кешированию из раздела Подготовить окружение статьи «Обновление страницы по команде сервера». После проверки удалите страницы и обработчик, который добавлен только для примера.

Найти причину сбоя доставки команды

Если команда не дошла, сначала сравните адрес чтения в браузере и адрес публикации в PHP с сохраненными настройками. Ошибки соединения, доставки и JS-обработчика разбираются по шагам в статье Диагностика и обслуживание Push and Pull.

Проверить настройку из PHP

Для проверки в коде приложения подключите модуль pull через Loader::includeModule() и вызовите CPullOptions::GetQueueServerStatus(). Фрагмент выполняется после загрузки ядра Bitrix:

use Bitrix\Main\Loader;

if (!Loader::includeModule('pull'))
{
    throw new \RuntimeException('Не удалось подключить модуль pull.');
}

$serverEnabled = \CPullOptions::GetQueueServerStatus();

Переменная $serverEnabled содержит результат проверки. Метод CPullOptions::GetQueueServerStatus() проверяет, включен ли локальный сервер или зарегистрирован ли облачный. Положительный результат не подтверждает доступность сервера по сети и не заменяет контрольную отправку. Код не меняет настройки и не отправляет команды.

Проверить результат после изменения настроек

После смены сервера, адресов или сертификата:

  1. Заново откройте страницу получателя.

  2. Проверьте в Network, что браузер подключается к нужному адресу.

  3. Отправьте новую контрольную команду и дождитесь изменения интерфейса.

  4. Повторите проверку на остальных доменах, если сайт использует несколько доменов.

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