1 уровень - интуитивно все понятно из интерфейса, но почитать стоит.
1 из 5
Просмотров:
17001
Дата изменения:
03.07.2023
Недоступно в лицензиях:
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Старт, Стандарт
Общая информация
Сервер очередей Push and Pull служит для мгновенного взаимодействия между собой многих инструментов продуктов Битрикс24 и 1С-Битрикс: Управление сайтом. Он используется в Задачах, Календарях, ленте Новостей, Группах, RPA, мобильном приложении Битрикс24, Чатах, Генераторе документов, Телефонии, Центре продаж и в других сервисах.
Внимание: Поддержка работы чатов без настроенного сервера очередей модуля Push and Pull прекращена с версии Веб-мессенджер (im) 20.400.0.
В виртуальной машине (
BitrixVM c версии 7.1 и выше
«1C-Битрикс: Виртуальная машина» – бесплатный программный продукт, готовый к немедленному использованию виртуальный сервер, полностью настроенный, протестированный и адаптированный для оптимальной работы как с продуктами «1С-Битрикс», так и с любыми PHP-приложениями.
Виртуальная машина сэкономит время и силы на правильное развертывание и администрирование сайта или внутреннего информационного ресурса на базе продуктов «1С-Битрикс».
Мы рекомендуем вам заранее настроить сервер очередей – облачный сервер «1С-Битрикс» или локальный Bitrix Push server 2.0. Инструкция в уроке.
Внимание: Поддержка старых версий локальных серверов очередей (Nginx-PushStreamModule 0.3.4/0.4.0 и Bitrix Push server 1.0) прекращена Осенью 2021 года.
Перейти на актуальную версию сервера (Bitrix Push server 2.0) вам помогут инструкции:
Внимание! Осенью 2021 года все старые версии модуля Push&Pull были признаны устаревшими, убраны из виртуальной машины BitrixVM и более не поддерживаются в продукте, например, чатами.
Настоятельно рекомендуем перейти на актуальные версии BitrixVM.
Для устаревших виртуальных машин используйте информацию из спойлеров.
Работа модуля Push and Pull Битрикса на виртуальной машине до версии 5.0.
На серверной стороне поддержка мгновенных сообщений осуществляется модулем 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 с v. 5.0 необходимости в настройке модуля нет: всё работает "из коробки". Если проект используется не на штатных средствах установки Bitrix Framework, то необходимо произвести дополнительные настройки.
Примечание: Приведённые ниже образцы настроек даны для примера. Настройку под конкретный проект, при отказе от использования рекомендуемых BitrixVM или BitrixEnvironment, администратор должен произвести самостоятельно.
Внимание! Работа модуля Push and Pull поддерживается только до версии 0.5 nginx-push-stream-module. Более свежие версии не поддерживаются, так как для работы Push and Pull разрабатывается специальное решение от «1С-Битрикс».
Соберите NGINX с поддержкой модуля nginx-push-stream-module;
В качестве примеров можно использовать файлы из нашей виртуальной машины:
/etc/nginx/bx/site_enabled/push.conf – настройки push and pull для публикации сообщений, а так же для работы мобильных;
/etc/nginx/bx/conf/im_subscrider.conf – настройки для получения сообщений (они подключаются к сайту непосредственно);
/etc/nginx/bx/conf/im_settings.conf – количество каналов, объём памяти и т.п.
# Common settings for nginx-push-stream-module
push_stream_shared_memory_size 256M;
push_stream_max_messages_stored_per_channel 1000;
push_stream_max_channel_id_length 32;
push_stream_max_number_of_channels 200000;
push_stream_message_ttl 86400;
Настроить отдельные виртуальные сервера NGINX на портах 8893, 8894, 8895 (/etc/nginx/bx/site_enabled/push.conf):
# поддержка мобильных платформ, для http запросов
server {
# nginx-push-stream-module server for push & pull
listen 8893;
server_name _;
# Include error handlers
include bx/conf/errors.conf;
# Include im subscrider handlers
include bx/conf/im_subscrider.conf;
location ^~ / { deny all; }
}
# поддержка мобильных платформ, для https запросов
# SSL enabled server for reading personal channels
server {
listen 8894;
server_name _;
include bx/conf/ssl.conf;
# Include error handlers
include bx/conf/errors.conf;
# Include im subscrider handlers
include bx/conf/im_subscrider.conf;
location ^~ / { deny all; }
}
# для публикации сообщений
# Server to push messages to user channels
server {
listen 127.0.0.1:8895;
server_name _;
location ^~ /bitrix/pub/ {
push_stream_publisher admin;
push_stream_channels_path $arg_CHANNEL_ID;
push_stream_store_messages on;
allow 127.0.0.0/8;
deny all;
}
location ^~ / { deny all; }
# Include error handlers
include bx/conf/errors.conf;
}
Для получения сообщений через запрос на стандартный порт (80 для http, 443 для https) в файл /etc/nginx/bx/conf/im_subscrider.conf добавлено:
# Include im subscrider handlers
include bx/conf/im_subscrider.conf;
Этот файл содержит:
# Location for long-polling connections
location ^~ /bitrix/sub {
# we don't use callback and droppped it (XSS)
if ( $arg_callback ) {
return 400;
}
push_stream_subscriber long-polling;
push_stream_allowed_origins "*";
push_stream_channels_path $arg_CHANNEL_ID;
push_stream_last_received_message_tag $arg_tag;
if ($arg_time) {
push_stream_last_received_message_time "$arg_time";
}
push_stream_longpolling_connection_ttl 40;
push_stream_authorized_channels_only on;
push_stream_message_template '#!NGINXNMS!#{"id":~id~,"channel":"~channel~","tag":"~tag~","time":"~time~","eventid":"~event-id~","text":~text~}#!NGINXNME!#';
}
# Location for websocet connections
location ^~ /bitrix/subws/ {
push_stream_subscriber websocket;
push_stream_channels_path $arg_CHANNEL_ID;
push_stream_websocket_allow_publish off;
push_stream_ping_message_interval 40s;
push_stream_authorized_channels_only on;
push_stream_last_received_message_tag "$arg_tag";
push_stream_last_received_message_time "$arg_time";
push_stream_message_template '#!NGINXNMS!#{"id":~id~,"channel":"~channel~","tag":"~tag~","time":"~time~","eventid":"~event-id~","text":~text~}#!NGINXNME!#';
}
Настройка nginx-push-stream-module в версии 0.3.4
Общие настройки:
# Common settings for nginx-push-stream-module
push_stream_shared_memory_size 256M;
push_stream_max_messages_stored_per_channel 1000;
push_stream_max_channel_id_length 32;
push_stream_max_number_of_channels 100000;
push_stream_shared_memory_cleanup_objects_ttl 60;
push_stream_message_ttl 86400;
Настройки сервера мгновенных сообщений
# Nonsecure server for reading personal channels. Use secure server instead.
server {
# nginx-push-stream-module server for push & pull
listen 8893;
include bx/node_host.conf;
# Include error handlers
include bx/conf/errors.conf;
# Location for long-polling connections
location ^~ /bitrix/sub {
push_stream_subscriber long-polling;
set $push_stream_channels_path $arg_CHANNEL_ID;
push_stream_last_received_message_tag $arg_tag;
push_stream_longpolling_connection_ttl 40;
push_stream_authorized_channels_only on;
push_stream_content_type "text/html; charset=utf-8";
push_stream_message_template "#!NGINXNMS!#{
\"id\":~id~,\"tag\":\"~tag~\",\"time\":\"~time~\",\"text\":~text~}#!NGINXNME!#";
}
# Location for websocet connections
location ^~ /bitrix/subws/ {
push_stream_websocket;
set $push_stream_channels_path $arg_CHANNEL_ID;
push_stream_websocket_allow_publish off;
push_stream_ping_message_interval 40s;
push_stream_authorized_channels_only on;
push_stream_message_template "#!NGINXNMS!#{
\"id\":~id~,\"tag\":\"~tag~\",\"time\":\"~time~\",\"text\":~text~}#!NGINXNME!#";
}
location ^~ / { deny all; }
}
# SSL enabled server for reading personal channels
server {
listen 8894;
include bx/node_host.conf;
include bx/conf/ssl.conf;
# Include error handlers
include bx/conf/errors.conf;
add_header "Access-Control-Allow-Origin" "*";
add_header "Access-Control-Allow-Headers" "if-modified-since, origin, if-none-match";
# Location for long-polling connections
location ^~ /bitrix/sub {
push_stream_subscriber long-polling;
set $push_stream_channels_path $arg_CHANNEL_ID;
push_stream_last_received_message_tag $arg_tag;
push_stream_longpolling_connection_ttl 40;
push_stream_authorized_channels_only on;
push_stream_content_type "text/html; charset=utf-8";
push_stream_message_template "#!NGINXNMS!#{
\"id\":~id~,\"tag\":\"~tag~\",\"time\":\"~time~\",\"text\":~text~}#!NGINXNME!#";
}
# Location for web socket connections
location ^~ /bitrix/subws/ {
push_stream_websocket;
set $push_stream_channels_path $arg_CHANNEL_ID;
push_stream_websocket_allow_publish off;
push_stream_ping_message_interval 40s;
push_stream_authorized_channels_only on;
push_stream_message_template "#!NGINXNMS!#{
\"id\":~id~,\"tag\":\"~tag~\",\"time\":\"~time~\",\"text\":~text~}#!NGINXNME!#";
}
location ^~ / { deny all; }
}
# Server to push messages to user channels
server {
listen 127.0.0.1:8895;
include bx/node_host.conf;
location ^~ /bitrix/pub/ {
push_stream_publisher admin;
set $push_stream_channel_id $arg_CHANNEL_ID;
push_stream_store_messages on;
push_stream_keepalive off;
allow 127.0.0.0/8;
deny all;
}
location ^~ / { deny all; }
# Include error handlers
include bx/conf/errors.conf;
}
Включите в настройках продукта на странице Настройки > Настройки продукта > Настройки модулей > Push and Pull опцию На сервере установлен модуль nginx-push-stream-module:
Также необходимо выбрать версию используемой вами машины. Рекомендуется использовать Виртуальную машину в версии 4.4 и выше, так как в ней используется более совершенная версия модуля nginx-push-stream-module 0.4.0, позволяющая использовать технологию Веб-сокетов и отправление команд.
При необходимости перенастройте шаблоны путей. Если используется Виртуальная машина, либо настройка nginx-push-stream-module производилась по аналогии с BitrixEnvironment, то изменения путей не требуется.
Внимание! Если у вас появляется ошибка вида:
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.
Необходимо либо обновить версию модуля, либо закомментировать строки:
Как использовать модуль, подробно рассказано в курсе Разработчик Bitrix Framework
в отдельной главе
Модуль работает в двух режимах:
1) постоянное подключение к специальному серверу Сервер очередей;
2) в режиме опроса сервера (60-20-10).
Первый режим рекомендуемый, от него вы получите настоящую интерактивность, но от вас потребуется
настроить Сервер очередей или взять готовую сконфигурированную виртуальную машину.
Второй режим используется когда по каким-то причинам невозможно использовать первый. В таком случае
модуль будет каждые 60 секунд обращаться на сервер и проверять, есть ли данные. Если есть, то
следующий хит будет через 10 секунд. Если данных больше нет, то хит будет сначала через 20 секунд,
а потом через каждые 60 секунд. Тем самым будет создан эффект интерактивности.