Bitrix pull websocket connection error

Проблема чего: «Ожидание доступного сокета»? Добрый день!Замечено следующее поведение и непонятно как его обойти. При множестве вкладок (в основном 8-10+) + новое обращение на сервере приводит к зависанию в вебкитовских браузерах.Сначала замечено было на сайте КорПортала, но потом заметил забавную вещь — и если открыть форума битрикса чтук 10-15 вкладок, при открытии новой может […]

Содержание

  1. Проблема чего: «Ожидание доступного сокета»?
  2. WebSocket connection to ‘ws://localhost:4000/’ failed: Error during WebSocket handshake: Unexpected response code: 400 #4778
  3. Comments
  4. Настройка модуля Push and Pull для корпоративного портала 1С-Битрикс
  5. Введение
  6. Проблема
  7. Сборка nginx с модулем nginx-push-stream-module
  8. Подключение собранного nginx
  9. Настройка nginx для модуля push and pull
  10. Настройка модуля Bitrix NodeJS RTC
  11. Заключение
  12. WebSocket connection to failed: Invalid frame header #2557
  13. Comments

Проблема чего: «Ожидание доступного сокета»?

Добрый день!
Замечено следующее поведение и непонятно как его обойти. При множестве вкладок (в основном 8-10+) + новое обращение на сервере приводит к зависанию в вебкитовских браузерах.
Сначала замечено было на сайте КорПортала, но потом заметил забавную вещь — и если открыть форума битрикса чтук 10-15 вкладок, при открытии новой может выскочить такой же прикол.

Как решить данную проблему?
И вообще на уровне чего эта проблема существует? На уровне браузера ограничение, или на уровне сервера (его настроек) или на уровне самого движка битрикса?

Очень грустная ситуация, потому что части сотрудников компании приходится постоянно держать открытыми 10-20+ вкладок — много задач и по ним делать мониторинг, приходится много переключаться.
Уже месяц как перешли на коробку BX24 с мегаплана и мучаемся =(

P.S. Модуль nginx push stream настроен корректно, проверка функций BX24 на него не ругается (вообще все пункты зеленые), отключение в настройках данного модуля «вебСоккетов» (снятие галки) результата не дает.

Цитата
Максим Кучук написал:
Александр Букуров , это ограничение на уровне сервера срабатывает
Цитата
Роман Клевцов написал:
Подскажите, в каком разделе админки можно включить галку «Включить поддержку WebSocket». Тоже намучались (

Добрый день! У нас на свежей установке битрикса тоже есть проблема с websocket.
Конфигурация:
Виртуальная машина BitrixVM7.1.0 с объемом диска 20 Гб для OVA (Sphere and etc.)
1С-Битрикс: Корпоративный портал 17.0.5.
Доступ с внешки настроен через обратный прокси на базе nginx (думаю это ключевой момент)

Описание проблемы:
Постоянно появляются ошибки при работе следующего содержания:

«WebSocket connection to ‘ws://domain.ru/bitrix/subws/?CHANNEL_ID=9ec059209540e24cb61da2ad3072c960/a5dedb91e15e1b16 ­b84fcb7ea951a578&tag=1&time=Fri,%2018%20Mar%202022%2021:00:00%20GMT’ failed: Error during WebSocket handshake: Unexpected response code: 400»

При этом если в конфигурации модуля push and pull убрать галочку с настройки «Включить поддержку WebSocket», то ошибки нет, но тогда появляются ошибки «Ожидание свободного сокета» и часть открытых вкладок в браузере Chrome начинают сильно виснуть.
Проверка конфигурации ошибок по сокетам не показывает вобще, то есть судь по проверке системы — все ок.
Подскажите, возможно надо корректно настроить работу с сокетами за реверс прокси, как это сделать?

Источник

WebSocket connection to ‘ws://localhost:4000/’ failed: Error during WebSocket handshake: Unexpected response code: 400 #4778

I can’t figure out what is the problem?

server:

client:

; if (error) return

The text was updated successfully, but these errors were encountered:

Even I am facing the same issue. Did you find a solution?

Hi @ThiruvenkatamR, Did you try my suggestion, ws://localhost:4000/graphql.

Yes, I tried. But no luck

This is the error

‘The connection to ws://localhost:4000/graphql was interrupted while the page was loading.’

Thanks @vincenterc , this is working in Chrome, but I have this issue in Firefox. Thanks once again.

I continue to get this issue on my Angular 8 app. I seem to have all the correct code

Has anyone had any luck with this?

Hi, I’m facing the same issue. I tried this but it no works! Does anyone have a solution?

Any fix?? Facing the same problem with Apollo Client 3

Nevermind, i forgot to add the /graphql at the end of the url just like @vincenterc pointed out.

I had this: ws://localhost:4000

Working code just in case anyone else faces this:

Adding the /graphql fixed this issue for me too.

Was a reverseproxy configuration issue for me, not a library issue

Adding /subscriptions worked for me

My problem was that I am using an Express server and applying Apollo Server as a middleware. I was not aware that I need to call graphqlServer.installSubscriptionHandlers(expressServer) too, as this was buried deep in the docs. That needs to be called on the HTTP server instance you get returned from expressApp.listen() . Now it is working!

Thank you @danieldunderfelt . You saved my day.

Thank you @danieldunderfelt. You made my year.

This doesn’t sound like an Apollo Client issue, but if anyone thinks it is and can provide a small runnable reproduction using @apollo/client@latest , we’ll take a look. Thanks!

Источник

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

Введение

Если у вас есть коробочная версия Битрикс24, и вы хотите использовать живую ленту, мгновенный чат, и получать push уведомления на телефон — вам понадобится модуль push and pull.

Под капотом у модуля модуль push and pull находится nginx с дополнительным модулем nginx-push-stream-module. Данный модуль не входит в стандартную поставку, поэтому для его подключения нужно собирать (компилировать) nginx из исходников.

Модуль nginx-push-stream-module есть в виртуальной машине битрикса (BitrixVM) из коробки. Поэтому самое простое решение данной задачи — развернуть BitrixVM и поставить на нее корпоративный портал.

Но если у вас нет BitrixVM и вы не хотите только ради этого переходить на нее — нужно скомпилировать nginx с поддержкой модуля nginx-push-stream-module из исходников, вручную.

Проблема

При работе с сайтом в публичной части выводится красная полоска с сообщением об ошибке “Отсутствует соединение с сервером”. Эта ошибка говорит о наличии проблемы с модулем push and pull.

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

Можно выделить ряд характерных сообщений об ошибках (их можно найти в админке или в логах), свидетельствующих о необходимости настройки модуля push and pull:

  • потеряно соединение с сервером
  • выключена опция nginx push stream module в настройках модуля push and pull
  • модуль nginx-push-stream работает некорректно
  • не удалось подключиться к модулю nginx-push-stream отправки мгновенных сообщений
  • не работает бизнес-чат в реальном времени (check_pull_stream): fail
  • не настроен модуль nginx push-stream-module
  • требуется установка nginx-push-stream-module
  • требуется настройка bitrix push server
  • требуется компиляция nginx для модуля push and pull для корпоративного портала

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

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

Проблемы с настройкой модуля push and pull регулярно возникают у многих. Судя по всему, задача не имеет тривиального решения, и исчерпывающего руководства, собранного в одном месте. Попробую исправить ситуацию.

Сборка nginx с модулем nginx-push-stream-module

Соберите NGINX с поддержкой модуля nginx-push-stream-module;

но не сказано в деталях как его собрать. Об этом сказано на сайте самого модуля nginx-push-stream-module, в разделе Installation. Там подробно описан процесс сборки, но есть некоторые нюансы, которые я хочу рассмотреть.

Текущая версия модуля nginx-push-stream-module 0.5.4 , а в документации битрикса сказано:

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

Еще одна сложность заключается в том, что версия модуля nginx-push-stream-module завязана на версию nginx. Версия моего текущего nginx была 1.12 и мне не удалось собрать из исходников эту же версию nginx, которая бы скомпилировалась с модулем nginx-push-stream-module версии 0.5 или 0.5.4. Поэтому я решил попробовать собрать nginx последней версии с последней версией модуля nginx-push-stream-module.

В конечном счете, чтобы собрать nginx у меня получилась такая конфигурация:

$ ./configure —add-module=../nginx-push-stream-module —with-zlib=./zlib-1.2.11 —with-openssl=./openssl-1.0.2n —with-pcre=./pcre-8.41 —with-http_ssl_module

—with-http_ssl_module — этот модуль нужен обязательно, если на сайте используется https. А для этого модуля нужна openssl библиотека. Но последняя версия (1.1.0) openssl библиотеки не годится, так как с ней nginx не компилируется — это известный баг и пока что нужно использовать старую версию(1.0.2).

—with-zlib — Библиотека нужна для модуля ngx_http_gzip_module. Указывается путь к папке с исходниками библиотеки.

—with-pcre — Библиотека нужна для использования регулярных выражений в директиве location и для модуля ngx_http_rewrite_module. Указывается путь к папке с исходниками библиотеки.

—add-module=../nginx-push-stream-module — подключаем модуль nginx-push-stream-module. Указывается путь к папке с исходниками библиотеки.

То есть, сначала нужно скачать исходники всех библиотек, распаковать их (например в текущей папке) и указать путь к ним.

Итоговый список bash команд (запускать от имени пользователя root ), чтобы собрать nginx со всеми необходимыми модулями:

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

После успешного выполнения команды ./configure , должно получить примерно следующее:

nginx binary file: «/usr/local/nginx/sbin/nginx» — в этом месте будет располагаться новый собранный бинарник, отсюда его нужно будет копировать вместо старого.

После успешного выполнения команды make install (она может выполняться долго), должно получиться примерно следующее:

Если появились какие-то сообщения об ошибках или есть строки красного цвета, значит что-то пошло не так.

Теперь можно проверить, правильно ли собрался nginx, есть ли там указанные модули /usr/local/nginx/sbin/nginx -V :

Таким же образом, можно перед сборкой посмотреть, какие модули были ранее установлены в старом nginx, скопировать их и добавить в список модулей для установки, при компиляции нового бинарника nginx.

Подключение собранного nginx

  • положить новый бинарник в рабочую папку вместо старого ( у меня /usr/sbin/nginx)
  • проверить и настроить пути к конфигам
  • остановить службу nginx
  • проверить, что нет ошибок
  • перезапустить службу nginx

Список bash команд для подключения нового бинарника, в общем виде:

/path/to/old/ — замените на свой путь к старому бинарнику.

Не удаляйте старый бинарник! Переименуйте его на время тестирования, чтобы вернуть его назад, если возникнут проблемы с работой сайтов.

Новый бинарник подтянет старые файлы конфигурации, однако сразу же проверьте работоспособность своих сайтов.

Но если путь к конфигам отличается от стандартного и не был указан при компиляции — может понадобится прописать путь к старому конфигу.

В моем случае новый бинарник подтягивал конфиг из /usr/local/nginx/conf/nginx.conf , а старые конфиги былы тут /etc/nginx/nginx.conf . Для решения этой проблемы достаточно создать симлинк на старый путь:

Настройка nginx для модуля push and pull

1) В nginx добавить в блок server<> (для виртуального хоста) локейшены из битриксовой документации

2) В nginx добавить общие настройки модуля push and pull.

Нужно создать новый файл в папке с конфигами nginx для виртуального хоста, например push_and_pull.conf и поместить в него настройки. Некоторые строки пришлось закомментировать, так как они нужны только для BitrixVM.

3) Включить модуль push and pull в настройках в админке

Значение параметра На сервер установлена ближе всего к Виртуальная машина 4.4 и выше (nginx-push-stream-module 0.4.0) , поэтому устанавливаем именно этот вариант.

Теперь можно тестировать работу модуля push and pull — сообщения в чате должны приходить мгновенно, а в живой ленте должны появляться изменения (комментарии, просмотры, лайки, записи) без перезагрузки страницы.

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

Push сервер на основе nginx не справлялся с нагрузкой, которую создавали пользователи облачного сервиса Битрикс24, и поэтому появилась необходимость в разработке нового push сервера — NodeJS RTC, у которого под капотом Node.js. Новый push сервер встроен в BitrixVM версии 7+ и есть инструкция по его настройке. Мне не удалось найти информацию, как его настраивать без использования BitrixVM.

Для любой коробочной версии корпоративного портала, в которой количество активных пользователей намного меньше, чем в облачной версии — вполне хватит старой реализации push сервера на основе nginx.

Заключение

Чтобы запустить модуль push and pull необязательно ставить BitrixVM.

Есть мнение, что сборка из исходников — это слишком простой путь, и что правильнее собрать полноценный deb-пакет, который будет управляться пакетным менеджером. Для такого пакета можно запретить обновление (hold), чтобы впредь не обновлялся.

В данном случае опробована связка Debian + nginx 1.2.0 + nginx-push-stream-module 0.5.4 + bitrix 17.5.8 — все работает.

Источник

WebSocket connection to failed: Invalid frame header #2557

WebSocket connection to ‘ws://10.1.30.58/socket.io/?EIO=3&transport=websocket’ failed: Invalid frame header

The text was updated successfully, but these errors were encountered:

On network tab

On client:

I used node-static for serving files, with it socket.io doesn’t work. With express or default node(http) it works.

@lgg is this issue solved? I have got the same problem

@rizkiaditya24 i used express.js instead of node-static

Same issue. Any one have solution for it?
Error:
WebSocket connection to ‘ws://192.168.0.160/socket.io/?EIO=3&transport=websocket’ failed: Invalid frame header

@rrpatilcse what server you are using?
expressjs?

i used nginx proxy django websoket service.now no way got it!throw «WebSocket connection to failed: Invalid frame header»

@zengliangbigdata show your nginx config, i think it could be troubles with proxy_pass

Same issue here.

VM41:164 WebSocket connection to ‘ws://localhost:1337/socket.io/?EIO=3&transport=websocket&sid=dl2GgAoz02RW0OjCAAAC’ failed: Invalid frame header

In the node.js console got this messages:
info: Client disconnect: NaN error: Can not find client NaN on disconnect

I’m using Chrome and have this error. Everything works fine in IE.

Same issue, I only get the error in the chrome console

Same issue, I only get the error in the chrome console

SAME.. do you find any solution??

same!! someone tell me what’s going on

Hi, I have encountered the same issue.

I am using NodeJS (LTS v12.18.1) with ExpressJS (v4.17.1) and Socket.io (v2.3.0).

Here is my server.js

`const express = require(‘express’);

const app = express();

const server = require(‘http’).createServer(app);

const io = require(‘socket.io’)(server);

io.on(‘connection’ ,socket => <
// socket events handling
>);

Has anyone found a solution?

Hi, I have encountered the same issue.

I am using NodeJS (LTS v12.18.1) with ExpressJS (v4.17.1) and Socket.io (v2.3.0).

Here is my server.js

`const express = require(‘express’);

const app = express();

const server = require(‘http’).createServer(app);

Источник

 

Пользователь 936775

Посетитель

Сообщений: 72
Баллов: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.02.2017

Доброго времени суток. После смены IP отвалился Push and Pull.
Смотрел эту тему:

https://dev.1c-bitrix.ru/support/forum/forum32/topic98131/?PAGEN_1=2

Решения не обнаружил. Используется VM 7.3 Как мне его запустить?

 

Пользователь 936775

Посетитель

Сообщений: 72
Баллов: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.02.2017

 

Пользователь 936775

Посетитель

Сообщений: 72
Баллов: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.02.2017

Нашел ошибку!

$check = new CSiteCheckerTest();
$check->check_socket_ssl();

Connection to ssl://localhost:443 (certificate check enabled)    Fail Connection to ssl://localhost:443    Fail Нравится16:23

Очевидно из-за этого не пашит. В чём причина может быть?

 

Пользователь 936775

Посетитель

Сообщений: 72
Баллов: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.02.2017

#4

0

14.09.2018 13:45:48

Обновил VM до версии 7.3.2.
Теперь в консоле:

Код
PULL notice: script is already loaded kernel_im_v1.js?15349719881571745:46098
(anonymous) @ kernel_im_v1.js?15349719881571745:46098
(anonymous) @ kernel_im_v1.js?15349719881571745:47561
pull.js?152282313141914:415 WebSocket connection to 'wss://sitename/bitrix/subws/?CHANNEL_ID=7f98fe340306595585c7b6f3288f7db9.906209b2b693ae212533addcbcbe7371b324501c/163a216a4bc17587629be49137b4c6ca.f292d69e8531147ea076e6f09f8300541dfbd1dc&tag=1&time=Fri,%2018%20Mar%202022%2021:00:00%20GMT' failed: Error during WebSocket handshake: Unexpected response code: 502
BX.PULL.connectWebSocket @ pull.js?152282313141914:415
BX.PULL.updateState @ pull.js?152282313141914:400
BX.PULL.init @ pull.js?152282313141914:187
BX.PULL.start @ pull.js?152282313141914:182
(anonymous) @ (index):2887
runReady @ kernel_main_v1.js?1536918839575941:5286
__readyHandler @ kernel_main_v1.js?1536918839575941:5223

Так же не пропали ошибки при проверке системы.
С ресурсами порядок.

Код
WebSocket connection to 'wss://crm.dsmed.ru/bitrix/subws/?CHANNEL_ID=7f98fe340306595585c7b6f3288f7db9.906209b2b693ae212533addcbcbe7371b324501c/163a216a4bc17587629be49137b4c6ca.f292d69e8531147ea076e6f09f8300541dfbd1dc&tag=1&time=Fri,%2018%20Mar%202022%2021:00:00%20GMT' failed: WebSocket opening handshake timed out

Прикрепленные файлы

Снимок экрана от 2018-09-14 14-32-41.png (2.58 КБ)

Снимок экрана от 2018-09-14 14-24-38.png (44.98 КБ)

 

Пользователь 936775

Посетитель

Сообщений: 72
Баллов: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.02.2017

Ситуация с проблемой! При смене место положения нашего сервера поменялся IP.
1. Необходимо исправить в файле hosts на новый IP.
2. Баг VM Bitrix. В ней так же необходимо исправить IP.  Но на момент написания данного комментария исправить это в VM нельзя. Я имею в виду NetAddress. Служба поддержки вроде работает над ним.

Может кто подскажет где мне его в файлах VM поменять?

И где VM правит фай push-server-multi?

Список файлов в которых встречается мой IP:
/etc/ansible/hosts // Формируется VM Bitrix
/etc/ansible/group_vars/bitrix-hosts.yml
/etc/ansible/ansible-roles
/etc/munin/munin-node.conf
/etc/munin/conf.d/munin-hosts.conf
/etc/nagios/nrpe.cfg
/etc/nagios/bitrix-pool/crm.cfg
/etc/sysconfig/push-server-multi
/etc/firewalld/zones/bx_trusted.xml
/etc/.hg/store/data/ansible/hosts.i
/etc/.hg/store/data/munin/conf.d.hg/munin-hosts.conf.i

Внимание вопрос: какие формируются VM Bitrix а с каких подтягивает инфу?

 

Пользователь 936775

Посетитель

Сообщений: 72
Баллов: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.02.2017

К сожалению, смена IP в файлах ни к чему не привела( Странно почему. И тут поспел ответ тех. поддержки и они говорят переустановить VM Bitrix.

 

Пользователь 936775

Посетитель

Сообщений: 72
Баллов: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.02.2017

#7

0

20.09.2018 14:40:40

Обновился до бэтки. Дальше очень интересно себя всё повело! При авторизации пользователя в системе сначала сверху выскакивает синее окно с надписью «Соединение установлено» потом через пару секунд — желтое с надписью «Ожидает соединения»  такая игра фраз повторяется три раза потом окончательно висит надпись на красном фоне, что «нет соединения с сервером».

Ошибки в консоле:

Код
PULL notice: script is already loaded
Failed to load resource: the server responded with a status of 400 ()
 

Пользователь 936775

Посетитель

Сообщений: 72
Баллов: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.02.2017

Долго я уже мучаюсь. Установил заново VM и вы думаете всё поехало? Нет! Виртуальная машина настраивает конфиги не совсем верно. Она создаёт фай /etc/hosts  c внутренним IP. В итоге у меня горела табличка вверху экрана, что нет соединения с сервером. Я залез и изменил там IP на внешний ( перед машиной стоит роутер, указал его IP). Теперь p&p не рыба ни мясо. То работает то не работает) Т.е. через секунд 40 он обновляется. И в логи валится ошибка сокета 400. Почему это так работает?

Моя логика подсказывает: У нас есть пул и у него должен быть внешний IP а у сайтов в пуле локальные. Так?

 

Пользователь 936775

Посетитель

Сообщений: 72
Баллов: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.02.2017

#9

0

02.10.2018 14:46:02

Частично проблему решил. Найден БАГ! Непонятно где он в коробке или VM, но при развороте бекапа сайта (коробки) с переустановленным окружением не прописывается «Код-подпись для взаимодействия с сервером» в настройках модуля Push and Pull. В результате не работал НИКАКОЙ P&P!!! Достать этот ключ получилось методом установки на новый сайт демонстрационной версии коробки и там в настройках его копировать. Кроме того после разворота отваливаются сокеты и модули. Пока не знаю как восстановить их работу.

Заработал модуль Push/RTC service, но не NGINX.

Введение

Если у вас есть коробочная версия Битрикс24, и вы хотите использовать живую ленту, мгновенный чат, и получать push уведомления на телефон — вам понадобится модуль push and pull.

Под капотом у модуля модуль push and pull находится nginx с дополнительным модулем nginx-push-stream-module. Данный модуль не входит в стандартную поставку, поэтому для его подключения нужно собирать (компилировать) nginx из исходников.

Модуль nginx-push-stream-module есть в виртуальной машине битрикса (BitrixVM) из коробки. Поэтому самое простое решение данной задачи — развернуть BitrixVM и поставить на нее корпоративный портал.

Но если у вас нет BitrixVM и вы не хотите только ради этого переходить на нее — нужно скомпилировать nginx с поддержкой модуля nginx-push-stream-module из исходников, вручную.

Проблема

При работе с сайтом в публичной части выводится красная полоска с сообщением об ошибке “Отсутствует соединение с сервером”. Эта ошибка говорит о наличии проблемы с модулем push and pull.

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

Можно выделить ряд характерных сообщений об ошибках (их можно найти в админке или в логах), свидетельствующих о необходимости настройки модуля push and pull:

  • потеряно соединение с сервером
  • выключена опция nginx push stream module в настройках модуля push and pull
  • модуль nginx-push-stream работает некорректно
  • не удалось подключиться к модулю nginx-push-stream отправки мгновенных сообщений
  • не работает бизнес-чат в реальном времени (check_pull_stream): fail
  • не настроен модуль nginx push-stream-module
  • требуется установка nginx-push-stream-module
  • требуется настройка bitrix push server
  • требуется компиляция nginx для модуля push and pull для корпоративного портала

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

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

Проблемы с настройкой модуля push and pull регулярно возникают у многих. Судя по всему, задача не имеет тривиального решения, и исчерпывающего руководства, собранного в одном месте. Попробую исправить ситуацию.

Сборка nginx с модулем nginx-push-stream-module

В учебном курсе Администратор. Модули → Push and Pull сказано

Соберите NGINX с поддержкой модуля nginx-push-stream-module;

но не сказано в деталях как его собрать. Об этом сказано на сайте самого модуля nginx-push-stream-module, в разделе Installation. Там подробно описан процесс сборки, но есть некоторые нюансы, которые я хочу рассмотреть.

Текущая версия модуля nginx-push-stream-module 0.5.4, а в документации битрикса сказано:

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

Еще одна сложность заключается в том, что версия модуля nginx-push-stream-module завязана на версию nginx. Версия моего текущего nginx была 1.12 и мне не удалось собрать из исходников эту же версию nginx, которая бы скомпилировалась с модулем nginx-push-stream-module версии 0.5 или 0.5.4. Поэтому я решил попробовать собрать nginx последней версии с последней версией модуля nginx-push-stream-module.

В конечном счете, чтобы собрать nginx у меня получилась такая конфигурация:

$ ./configure --add-module=../nginx-push-stream-module --with-zlib=./zlib-1.2.11 --with-openssl=./openssl-1.0.2n --with-pcre=./pcre-8.41 --with-http_ssl_module

--with-http_ssl_module — этот модуль нужен обязательно, если на сайте используется https. А для этого модуля нужна openssl библиотека. Но последняя версия (1.1.0) openssl библиотеки не годится, так как с ней nginx не компилируется — это известный баг и пока что нужно использовать старую версию(1.0.2).

--with-zlib — Библиотека нужна для модуля ngx_http_gzip_module. Указывается путь к папке с исходниками библиотеки.

--with-pcre — Библиотека нужна для использования регулярных выражений в директиве location и для модуля ngx_http_rewrite_module. Указывается путь к папке с исходниками библиотеки.

--add-module=../nginx-push-stream-module — подключаем модуль nginx-push-stream-module. Указывается путь к папке с исходниками библиотеки.

То есть, сначала нужно скачать исходники всех библиотек, распаковать их (например в текущей папке) и указать путь к ним.

Итоговый список bash команд (запускать от имени пользователя root), чтобы собрать nginx со всеми необходимыми модулями:

# clone the nginx-push-stream-module project
git clone https://github.com/wandenberg/nginx-push-stream-module.git
NGINX_PUSH_STREAM_MODULE_PATH=$PWD/nginx-push-stream-module

# get desired nginx version (works with 1.2.0+)
wget http://nginx.org/download/nginx-1.2.0.tar.gz

# extract nginx
tar xzvf nginx-1.2.0.tar.gz
cd nginx-1.2.0

# download and extract zlib module
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -xf zlib-1.2.11.tar.gz

# download and extract openssl module
wget https://www.openssl.org/source/openssl-1.0.2n.tar.gz
tar -xf openssl-1.0.2n.tar.gz

# download and extract pcre module
wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz
tar -xf pcre-8.41.tar.gz

# configure and build
./configure --add-module=../nginx-push-stream-module --with-zlib=./zlib-1.2.11 --with-openssl=./openssl-1.0.2n --with-pcre=./pcre-8.41 --with-http_ssl_module
make build

# install and finish
make install

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

После успешного выполнения команды ./configure, должно получить примерно следующее:

nginx binary file: "/usr/local/nginx/sbin/nginx" — в этом месте будет располагаться новый собранный бинарник, отсюда его нужно будет копировать вместо старого.

После успешного выполнения команды make install (она может выполняться долго), должно получиться примерно следующее:

Если появились какие-то сообщения об ошибках или есть строки красного цвета, значит что-то пошло не так.

Теперь можно проверить, правильно ли собрался nginx, есть ли там указанные модули /usr/local/nginx/sbin/nginx -V:

Таким же образом, можно перед сборкой посмотреть, какие модули были ранее установлены в старом nginx, скопировать их и добавить в список модулей для установки, при компиляции нового бинарника nginx.

Подключение собранного nginx

Порядок действий:

  • положить новый бинарник в рабочую папку вместо старого ( у меня /usr/sbin/nginx)
  • проверить и настроить пути к конфигам
  • остановить службу nginx
  • проверить, что нет ошибок
  • перезапустить службу nginx

Список bash команд для подключения нового бинарника, в общем виде:

service nginx stop
mv /path/to/old/nginx /path/to/old/nginx_backup
mv /usr/local/nginx/sbin/nginx /path/to/old/nginx
ngint -t
service nginx start

/path/to/old/ — замените на свой путь к старому бинарнику.

Не удаляйте старый бинарник! Переименуйте его на время тестирования, чтобы вернуть его назад, если возникнут проблемы с работой сайтов.

Новый бинарник подтянет старые файлы конфигурации, однако сразу же проверьте работоспособность своих сайтов.

Но если путь к конфигам отличается от стандартного и не был указан при компиляции — может понадобится прописать путь к старому конфигу.

В моем случае новый бинарник подтягивал конфиг из /usr/local/nginx/conf/nginx.conf, а старые конфиги былы тут /etc/nginx/nginx.conf. Для решения этой проблемы достаточно создать симлинк на старый путь:

cd /usr/local/nginx/
mv conf/ conf_del
ln -s /etc/nginx/ ./conf

Настройка nginx для модуля push and pull

1) В nginx добавить в блок server{} (для виртуального хоста) локейшены из битриксовой документации

# 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!#';
}

2) В nginx добавить общие настройки модуля push and pull.

Нужно создать новый файл в папке с конфигами nginx для виртуального хоста, например push_and_pull.conf и поместить в него настройки.
Некоторые строки пришлось закомментировать, так как они нужны только для BitrixVM.

# 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;

# поддержка мобильных платформ, для 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;
}

3) Включить модуль push and pull в настройках в админке

Значение параметра На сервер установлена ближе всего к Виртуальная машина 4.4 и выше (nginx-push-stream-module 0.4.0), поэтому устанавливаем именно этот вариант.

Теперь можно тестировать работу модуля push and pull — сообщения в чате должны приходить мгновенно, а в живой ленте должны появляться изменения (комментарии, просмотры, лайки, записи) без перезагрузки страницы.

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

Push сервер на основе nginx не справлялся с нагрузкой, которую создавали пользователи облачного сервиса Битрикс24, и поэтому появилась необходимость в разработке нового push сервера — NodeJS RTC, у которого под капотом Node.js. Новый push сервер встроен в BitrixVM версии 7+ и есть инструкция по его настройке. Мне не удалось найти информацию, как его настраивать без использования BitrixVM.

Для любой коробочной версии корпоративного портала, в которой количество активных пользователей намного меньше, чем в облачной версии — вполне хватит старой реализации push сервера на основе nginx.

Заключение

Чтобы запустить модуль push and pull необязательно ставить BitrixVM.

Есть мнение, что сборка из исходников — это слишком простой путь, и что правильнее собрать полноценный deb-пакет, который будет управляться пакетным менеджером. Для такого пакета можно запретить обновление (hold), чтобы впредь не обновлялся.

В данном случае опробована связка Debian + nginx 1.2.0 + nginx-push-stream-module 0.5.4 + bitrix 17.5.8 — все работает.

Полезные ссылки

Общая информация

  • Зачем настраивать модуль Push&Pull

Инструкции по сборке nginx

  • Сборка nginx из исходных файлов — офиц. документация
  • Пример сборки nginx с добавлением модуля ngx_pagespeed
  • Учебный курс — Администратор. Модули — Push and Pull
  • Как установить nginx push-and-pull на Debian (для Bitrix)
  • Push and Pull for Bitrix without BitrixEnv

Исходники библиотек

  • nginx core
  • nginx-push-stream-module (push and pull)
  • zlib
  • openssl
  • pcre

Решение возможных проблем

  • git command not found
  • make command not found
  • configure: error: You need a C++ compiler for C++ support
  • nginx — src/core/ngx_sha1.h:19:17: no such file or directory

Во время тестирования сайта, выскакивает следующая ошибка:

Работа с сокетами (check_socket): Fail


А в журнале мы видим следующий лог:

2016-Feb-27 13:41:10 Работа с сокетами (check_socket): Fail
Connection to site.ru:80  Success
== Request ==
GET /bitrix/admin/site_checker.php?test_type=socket_test&unique_id=83f81a8666278b68e58012ce161a1dd0 HTTP/1.1
Host:  site.ru


== Response ==
HTTP/1.1 404 Not Found
Server: nginx/1.4.6 (Ubuntu)
Date: Sat, 27 Feb 2016 12:41:10 GMT
Content-Type: text/html
Content-Length: 177
Connection: keep-alive

== Body ==
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.4.6 (Ubuntu)</center>
</body>
</html>

==========

Для начала мы видим в этом логе, что при запросе система получает 404 ошибку. Нам нужно понять почему она происходит. Для этого нам нужно проверить логи веб-сервера. Так как у меня работает на nginx + apache2, я открыл логи nginx (Linux /var/log/nginx/error.log).

В данном логе я ищу мой запрос

2016/02/27 13:41:10 [error] 2309#0: *658 openat() "/usr/share/nginx/html/bitrix/admin/site_checker.php" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /bitrix/admin/site_checker.php?test_type=socket_test&unique_id=83f81a8666278b68e58012ce161a1dd0 HTTP/1.1", host: "site.ru"

И что мы тут видим? Когда скрипт обращается сам к себе, то происходит обращение вообще не понятно по какому адресу «/usr/share/nginx/html/bitrix/admin/site_checker.php», тогда как сайт лежит: /var/www/site.ru/www/bitrix/admin/site_checker.php

Так же обратите внимание по какому адресу обращается скрипт:

client: 127.0.0.1, server: localhost, 

Из этого мы делаем вывод что site.ru привязан к localhost и при обращении сайта к самому себе пытается найти файлы не в папке сайта, а в папке nginx по умолчанию. Открыв фаил /etc/hosts я увидел следующую запись:

127.0.0.1 localhost.localdomain localhost site.ru

Изменив эту строчку на

127.0.0.1 localhost.localdomain localhost

я успешно прошел тест, и ошибка больше не возникала!

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

Администратор сервиса Битрикс24 (коробочная версия)

Сложность урока:

4 уровень — сложно, требуется сосредоточится, внимание деталям и точному следованию инструкции.

5

Недоступно в редакциях:

Старт, Стандарт

Настройка Push and Pull

Если ваш Битрикс установлен на виртуальной машине

BitrixVM версии 7.1 или старше

Виртуальная машина сэкономит время и силы на правильное развертывание и администрирование сайта или внутреннего информационного ресурса на базе продуктов «1С-Битрикс».

Подробнее …




, то у вас нет необходимости настраивать модуль Push and Pull. В виртуальной машине уже поставляется отдельный Push-сервер, он настроен и сконфигурирован и работает «из коробки».

Если, всё же необходимо произвести некоторые изменения, то это делается на странице Настройки > Настройки продукта > Настройки модулей > Push and Pull:

Нажмите на рисунок, чтобы увеличить

  • Укажите секретный код для подписи сообщения. Это 32-х значный произвольный код, который указывается в настройках пуш-сервера:
    ./push-server/config/config.json:
    "security": {
            "key": 

    Примечание: В виртуальной машине

    BitrixVM

    «1C-Битрикс: Виртуальная машина» — бесплатный программный продукт, готовый к немедленному использованию виртуальный сервер, полностью настроенный, протестированный и адаптированный для оптимальной работы как с продуктами «1С-Битрикс», так и с любыми PHP-приложениями. Имеется в версии для Windows и для Unix систем.
    Подробнее…



    это поле создается автоматически при первом старте службы или при настройке/обновлении и прописывается в настройки сайта.

  • При необходимости перенастройте шаблоны путей. Домен в адресе для чтения сообщений можно указать #DOMAIN#: такая нотация будет автоматически заменяться под нужный домен для многодоменных конфигураций. Пример: http://#DOMAIN#:8893/bitrix/sub/.
  • Если в системе несколько активных сайтов, то есть возможность выбрать, на каких сайтах модуль не будет работать.

Работа модуля Push and Pull Битрикса на виртуальной машине до версии 5.0.

Настройка nginx-push-stream-module в версии 0.4.0 (рекомендуется к использованию)

Настройка nginx-push-stream-module в версии 0.3.4

Как использовать модуль, подробно рассказано в курсе Разработчик Bitrix Framework в главе

Push and Pull

Модуль Push & Pull работает в двух режимах:

постоянное подключение к специальному серверу Сервер очередей;
в режиме опроса сервера (60-20-10).

Подробнее …




.

Документация по теме:

  • Настройки модуля (документация)
  • Зачем настраивать модуль Push&Pull (блог)
  • Работа с модулем для разработчиков
  • API модуля
  • Push-уведомления в курсе «BitrixMobile — создание кроссплатформенных мобильных приложений»

27


Подписаться на новые материалы раздела:

Итак, многие сталкиваются с такой проблемой как ошибка сокетов при проверке сайта (а с 30 сентября 2021 так еще больше таких проблем, решение будет ниже):

2021-10-11_11-14-32.png

Из-за этой ошибки сайт не может проверить все остальные параметры и вы видите очень много красных предупреждений: «Замечание. Не удалось проверить из-за ошибки в работе с сокетами». Она бывает при установке сайта на виртуальную машину Битрикс.

Что делать?

Первое что нужно сделать при запуске сайта на виртуальной машине Битрикс, это прописать домен в файле hosts. Заходим на сервер по sftp под root-пользователем, идем в корневую папку etc, открываем файл hosts.

В первой строке через пробел прописываем домен (если доменов несколько, прописываем все через пробелы в этой строке).

Получится примерно так:
127.0.0.1       localhost.localdomain localhost rushstudio.by

Сохраняем файл и перезагружаемся. Готово, все работает.

Домен прописан, ошибка осталась

Сейчас (осень 2021) у всех массово возникли проблемы. Это касается изменений на стороне центра сертификации let’s encrypt (30 сентября 2021 года подошел к концу срок действия корневого сертификата IdenTrust DST Root CA X3.). И если у вас было все настроено и работало, ошибка все-равно появляется.

Решается все довольно просто. Подключаемся по SSH, выходим из открывшегося меню (ctrl+c) и вводим команды подряд:
yum install ca-certificates
update-ca-trust

Готово. Теперь все будет работать.

Думаю в следующих обновлениях Виртуальной машины это поправят, но пока это решение рабочее на 100%.

Все-равно не помогло?

Первым делом проверьте AAAA-запись у домена, если она есть, удалите.
Не помогло? Проверьте что доступ к админке, где вы запускаете тест, открыт (нет ограничений по IP или других блокировок).

Дальнейшие случаи крааайне редки, но встречаются. Тут вам понадобятся немного знаний по системному администриролванию и нужно проверить firewall (сервер пытается подключиться сам к себе, а доступ закрыт) или для входа на сайт требуется HTTP/NTLM авторизация (тут уже просто на время тестирования отключите ее).

Как исправить ошибки Push and Pull в битрикс24?

Стоит на локальной сети коробка 1С-Битрикс: Корпоративный портал 21.900.0 сервер напрочь отрублен от интернета(политика компании)
Из ошибок только отправка почты и Доступ снаружи к Экстранет.
У простых пользователей постоянно вылетает Отсутствует соединение с сервером. и со временем вылетает просто, как это можно решить?
код подписи и настройки сделаны по инструкции, через терминал показывает что все ок
http://#DOMAIN#/bitrix/pubweb/
http://#DOMAIN#/bitrix/sub/
ws://#DOMAIN#/bitrix/subws/

Centos 7 BitriVM CRM
4 ядра 16гб оперативы ECC

раздел session в php.ini

  • Вопрос задан 26 авг. 2022
  • 605 просмотров

Этот ответ выдает REST часть которая должна вернуть настройки.
Возможно происходит одна из следующих частей:
1. Пользователь, под которым наблюдается ошибка, является экстранет пользователем (т.е. не сотрудник организации).
2. Публичная часть портала закрыта для пользователей (в админке, в настройках главного модуля закрыли доступ)
3. Есть ошибки с хранением сессии на сервере.

Если вы не закрывали доступ, то проверьте остальные пункты.
Как проверить что пользователь является сотрудником организации? Нужно открыть в админке профиль пользователя и проверить чтобы у него было проставлено:
— Активное подразделение (подразделение, которое является активным, т.е. не деактивировано)
— Он должен состоять в группе сотрудники (обычно это **: Сотрудники и ID:12)

Затем нужно проверить сессию.
Откройте веб-консоль браузера и посмотрите на sessid (PHPSESSID в cookie) значение, при движении по порталу он не должен меняться часто (т.е. когда он один раз в день меняется — нормально, а если он меняется на каждой странице — не нормально).

Источник

Проблема чего: «Ожидание доступного сокета»?

Добрый день!
Замечено следующее поведение и непонятно как его обойти. При множестве вкладок (в основном 8-10+) + новое обращение на сервере приводит к зависанию в вебкитовских браузерах.
Сначала замечено было на сайте КорПортала, но потом заметил забавную вещь — и если открыть форума битрикса чтук 10-15 вкладок, при открытии новой может выскочить такой же прикол.

Как решить данную проблему?
И вообще на уровне чего эта проблема существует? На уровне браузера ограничение, или на уровне сервера (его настроек) или на уровне самого движка битрикса?

Очень грустная ситуация, потому что части сотрудников компании приходится постоянно держать открытыми 10-20+ вкладок — много задач и по ним делать мониторинг, приходится много переключаться.
Уже месяц как перешли на коробку BX24 с мегаплана и мучаемся =(

P.S. Модуль nginx push stream настроен корректно, проверка функций BX24 на него не ругается (вообще все пункты зеленые), отключение в настройках данного модуля «вебСоккетов» (снятие галки) результата не дает.

Цитата
Максим Кучук написал:
Александр Букуров , это ограничение на уровне сервера срабатывает
Цитата
Роман Клевцов написал:
Подскажите, в каком разделе админки можно включить галку «Включить поддержку WebSocket». Тоже намучались (

Добрый день! У нас на свежей установке битрикса тоже есть проблема с websocket.
Конфигурация:
Виртуальная машина BitrixVM7.1.0 с объемом диска 20 Гб для OVA (Sphere and etc.)
1С-Битрикс: Корпоративный портал 17.0.5.
Доступ с внешки настроен через обратный прокси на базе nginx (думаю это ключевой момент)

Описание проблемы:
Постоянно появляются ошибки при работе следующего содержания:

«WebSocket connection to ‘ws://domain.ru/bitrix/subws/?CHANNEL_ID=9ec059209540e24cb61da2ad3072c960/a5dedb91e15e1b16 ­b84fcb7ea951a578&tag=1&time=Fri,%2018%20Mar%202022%2021:00:00%20GMT’ failed: Error during WebSocket handshake: Unexpected response code: 400»

При этом если в конфигурации модуля push and pull убрать галочку с настройки «Включить поддержку WebSocket», то ошибки нет, но тогда появляются ошибки «Ожидание свободного сокета» и часть открытых вкладок в браузере Chrome начинают сильно виснуть.
Проверка конфигурации ошибок по сокетам не показывает вобще, то есть судь по проверке системы — все ок.
Подскажите, возможно надо корректно настроить работу с сокетами за реверс прокси, как это сделать?

Источник

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

Введение

Если у вас есть коробочная версия Битрикс24, и вы хотите использовать живую ленту, мгновенный чат, и получать push уведомления на телефон — вам понадобится модуль push and pull.

Под капотом у модуля модуль push and pull находится nginx с дополнительным модулем nginx-push-stream-module. Данный модуль не входит в стандартную поставку, поэтому для его подключения нужно собирать (компилировать) nginx из исходников.

Модуль nginx-push-stream-module есть в виртуальной машине битрикса (BitrixVM) из коробки. Поэтому самое простое решение данной задачи — развернуть BitrixVM и поставить на нее корпоративный портал.

Но если у вас нет BitrixVM и вы не хотите только ради этого переходить на нее — нужно скомпилировать nginx с поддержкой модуля nginx-push-stream-module из исходников, вручную.

Проблема

При работе с сайтом в публичной части выводится красная полоска с сообщением об ошибке “Отсутствует соединение с сервером”. Эта ошибка говорит о наличии проблемы с модулем push and pull.

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

Можно выделить ряд характерных сообщений об ошибках (их можно найти в админке или в логах), свидетельствующих о необходимости настройки модуля push and pull:

  • потеряно соединение с сервером
  • выключена опция nginx push stream module в настройках модуля push and pull
  • модуль nginx-push-stream работает некорректно
  • не удалось подключиться к модулю nginx-push-stream отправки мгновенных сообщений
  • не работает бизнес-чат в реальном времени (check_pull_stream): fail
  • не настроен модуль nginx push-stream-module
  • требуется установка nginx-push-stream-module
  • требуется настройка bitrix push server
  • требуется компиляция nginx для модуля push and pull для корпоративного портала

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

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

Проблемы с настройкой модуля push and pull регулярно возникают у многих. Судя по всему, задача не имеет тривиального решения, и исчерпывающего руководства, собранного в одном месте. Попробую исправить ситуацию.

Сборка nginx с модулем nginx-push-stream-module

Соберите NGINX с поддержкой модуля nginx-push-stream-module;

но не сказано в деталях как его собрать. Об этом сказано на сайте самого модуля nginx-push-stream-module, в разделе Installation. Там подробно описан процесс сборки, но есть некоторые нюансы, которые я хочу рассмотреть.

Текущая версия модуля nginx-push-stream-module 0.5.4 , а в документации битрикса сказано:

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

Еще одна сложность заключается в том, что версия модуля nginx-push-stream-module завязана на версию nginx. Версия моего текущего nginx была 1.12 и мне не удалось собрать из исходников эту же версию nginx, которая бы скомпилировалась с модулем nginx-push-stream-module версии 0.5 или 0.5.4. Поэтому я решил попробовать собрать nginx последней версии с последней версией модуля nginx-push-stream-module.

В конечном счете, чтобы собрать nginx у меня получилась такая конфигурация:

$ ./configure —add-module=../nginx-push-stream-module —with-zlib=./zlib-1.2.11 —with-openssl=./openssl-1.0.2n —with-pcre=./pcre-8.41 —with-http_ssl_module

—with-http_ssl_module — этот модуль нужен обязательно, если на сайте используется https. А для этого модуля нужна openssl библиотека. Но последняя версия (1.1.0) openssl библиотеки не годится, так как с ней nginx не компилируется — это известный баг и пока что нужно использовать старую версию(1.0.2).

—with-zlib — Библиотека нужна для модуля ngx_http_gzip_module. Указывается путь к папке с исходниками библиотеки.

—with-pcre — Библиотека нужна для использования регулярных выражений в директиве location и для модуля ngx_http_rewrite_module. Указывается путь к папке с исходниками библиотеки.

—add-module=../nginx-push-stream-module — подключаем модуль nginx-push-stream-module. Указывается путь к папке с исходниками библиотеки.

То есть, сначала нужно скачать исходники всех библиотек, распаковать их (например в текущей папке) и указать путь к ним.

Итоговый список bash команд (запускать от имени пользователя root ), чтобы собрать nginx со всеми необходимыми модулями:

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

После успешного выполнения команды ./configure , должно получить примерно следующее:

nginx binary file: «/usr/local/nginx/sbin/nginx» — в этом месте будет располагаться новый собранный бинарник, отсюда его нужно будет копировать вместо старого.

После успешного выполнения команды make install (она может выполняться долго), должно получиться примерно следующее:

Если появились какие-то сообщения об ошибках или есть строки красного цвета, значит что-то пошло не так.

Теперь можно проверить, правильно ли собрался nginx, есть ли там указанные модули /usr/local/nginx/sbin/nginx -V :

Таким же образом, можно перед сборкой посмотреть, какие модули были ранее установлены в старом nginx, скопировать их и добавить в список модулей для установки, при компиляции нового бинарника nginx.

Подключение собранного nginx

  • положить новый бинарник в рабочую папку вместо старого ( у меня /usr/sbin/nginx)
  • проверить и настроить пути к конфигам
  • остановить службу nginx
  • проверить, что нет ошибок
  • перезапустить службу nginx

Список bash команд для подключения нового бинарника, в общем виде:

/path/to/old/ — замените на свой путь к старому бинарнику.

Не удаляйте старый бинарник! Переименуйте его на время тестирования, чтобы вернуть его назад, если возникнут проблемы с работой сайтов.

Новый бинарник подтянет старые файлы конфигурации, однако сразу же проверьте работоспособность своих сайтов.

Но если путь к конфигам отличается от стандартного и не был указан при компиляции — может понадобится прописать путь к старому конфигу.

В моем случае новый бинарник подтягивал конфиг из /usr/local/nginx/conf/nginx.conf , а старые конфиги былы тут /etc/nginx/nginx.conf . Для решения этой проблемы достаточно создать симлинк на старый путь:

Настройка nginx для модуля push and pull

1) В nginx добавить в блок server<> (для виртуального хоста) локейшены из битриксовой документации

2) В nginx добавить общие настройки модуля push and pull.

Нужно создать новый файл в папке с конфигами nginx для виртуального хоста, например push_and_pull.conf и поместить в него настройки. Некоторые строки пришлось закомментировать, так как они нужны только для BitrixVM.

3) Включить модуль push and pull в настройках в админке

Значение параметра На сервер установлена ближе всего к Виртуальная машина 4.4 и выше (nginx-push-stream-module 0.4.0) , поэтому устанавливаем именно этот вариант.

Теперь можно тестировать работу модуля push and pull — сообщения в чате должны приходить мгновенно, а в живой ленте должны появляться изменения (комментарии, просмотры, лайки, записи) без перезагрузки страницы.

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

Push сервер на основе nginx не справлялся с нагрузкой, которую создавали пользователи облачного сервиса Битрикс24, и поэтому появилась необходимость в разработке нового push сервера — NodeJS RTC, у которого под капотом Node.js. Новый push сервер встроен в BitrixVM версии 7+ и есть инструкция по его настройке. Мне не удалось найти информацию, как его настраивать без использования BitrixVM.

Для любой коробочной версии корпоративного портала, в которой количество активных пользователей намного меньше, чем в облачной версии — вполне хватит старой реализации push сервера на основе nginx.

Заключение

Чтобы запустить модуль push and pull необязательно ставить BitrixVM.

Есть мнение, что сборка из исходников — это слишком простой путь, и что правильнее собрать полноценный deb-пакет, который будет управляться пакетным менеджером. Для такого пакета можно запретить обновление (hold), чтобы впредь не обновлялся.

В данном случае опробована связка Debian + nginx 1.2.0 + nginx-push-stream-module 0.5.4 + bitrix 17.5.8 — все работает.

Источник

Views: 4287
Last Modified: 17.08.2020

  Interactive applications

Information listed below is useful when you need to write code for your own client. If you don’t need a new client, but only added interactivity feature into already existing application, find more information here.

RT-servers connection is used for creating a truly interactive application: instant application status changes and interface updates without AJAX requests.

  Application development

There are two ways to connect the service: Long polling and websocket. When user enters the site, user’s browser, desktop or mobile application establishes and maintain constant connection with Push-server.

Usually this is done via WebSocket, employed by 95% modern browsers. When a browser does not support WebSocket technology, Long Polling is used.

It’s recommended to use websocket as the main method for establishing RT-server connection. Long polling is used only for devices without websocket support or when client experiences problems when connecting to websocket.

To retrieve server and connectivity data, use REST command pull.application.config.get

For connecting to the server, get a required type (for example, websocket_secure) in server settings (server field) for required connection. Next,

add

Connection channels are listed in GET parameter CHANNEL_ID.


all available channels (separated by /.) to this type of connection. Add the parameter clientId. When Bitrix24 account uses cloud-based push server, add the parameter clientId to URL to connect to server.

Websocket connection example for Bitrix24 Self-hosted push-server:

wss://rt.bitrix24.com/sub/?CHANNEL_ID=46a437d2336d4a88e4e9b3cd956ecf45:6221e0eb48981fce67cf4756e82e8102.7910bb25e660bf211fdec15e33c5e25e4c3b644a/fb9f7e13dc3d595c5aefe1a0216c27a2.2887eebc6ae160713a732893462dce9d8e23a7b0

Websocket connection example for Bitrix24 Cloud push-server:

wss://rtc-cloud-ms1.bitrix.info/subws/?CHANNEL_ID=beb502091dfc9b93d7fd648aa4ec332e%3A7cc478c89de71ec78bf4820d3d814a3e.4f5466742ca1e59e263fee732a7dbe002889ba91%2F1ab4f7a440cea35a1abccd5c2566c688.b33914ef342e5cd21e4fbcf4ac92acd2e9ea3755&clientId=fcda45d0859442735f07b8bb5825ded1

Each channel operation time is limited by 12 hours. You must track the expiration time and execute repeated request pull.application.config.get when one of channels operation time has expired.

To access channel history, add special get-tags to the address specified above: &tag= and &time= (for server version 2 and lower) or &mid= (for version 3 and higher). You can get all the required data for get-tags when reviewing each command from channel. After connecting with these tags, you’ll have a one-time access to messages that weren’t available for the current session.

  General format for commands from server

Server version 3 and lower, when queried, receives text as follows:

#!NGINXNMS!#{"id":320146,"mid":"14526134350000000000320146","channel":"6221e0eb48981fce67cf4756e82e8102","tag":"672","time":"Thu, 29 Jun 2017 09:50:16 GMT","text":{...},"extra":{...}}}#!NGINXNME!#
#!NGINXNMS!#{"id":320147,"mid":"14526134350000000000320147","channel":"6221e0eb48981fce67cf4756e82e8102","tag":"673","time":"Thu, 29 Jun 2017 09:50:17 GMT","text":{...},"extra":{...}}}#!NGINXNME!#

To handle the command, you must get its content and convert it to JSON format. Commands are located in-between controlling phrases #!NGINXNMS!# and #!NGINXNME!#.

Starting from server version 4, use GET parameter &format=json when connecting and receiving commands. This parameter will be passed to you in JSON format:

[
    {"id":320146,"mid":"14526134350000000000320146","channel":"6221e0eb48981fce67cf4756e82e8102","tag":"672","time":"Thu, 29 Jun 2017 09:50:16 GMT","text":{...},"extra":{...}}},
    {"id":320147,"mid":"14526134350000000000320147","channel":"6221e0eb48981fce67cf4756e82e8102","tag":"673","time":"Thu, 29 Jun 2017 09:50:17 GMT","text":{...},"extra":{...}}}
]

JSON command structure has the following unified look:

{
    "id" : 320146,
    "mid" : "14526134350000000000320146",
    "channel" : "6221e0eb48981fce67cf4756e82e8102",
    "tag" : "672",
    "time" :"Mon, 03 Oct 2017 06:36:01 GMT",
    "text" : {
        "module_id" : "main",
        "command" : "user_online",
        "params" : {
            ...
        },
    "extra" : {
        "server_time": "2017-10-03T08:36:01+02:00",
        "server_time_unix": 1507012561,
        "server_time_ago": 0,
        'revision': 16,
		'revisionMobile': 1,
        "channel" : "6221e0eb48981fce67cf4756e82e8102"
    }
}

Where:

  • id — message ID
  • mid — message ID (only for server version 3 and higher. Restores history from the moment of a specific message)
  • channel — channel ID (only for server version 3 and higher. Use extra channel for earlier versions)
  • tag — E-tag (only for server version 2 and lower. Restores history from the moment of a specific message)
  • time — message time (only for server version 2 and lower. Restores history from the moment of a specific message)
  • text — structure describing a command action. Contains the following keys:
    • module_id — module ID that sends a command (for marketplace applications — appId)
    • command — command ID
    • params — additional data for executing a command
  • extra — structure describing additional data:
    • server_time — Server time when command created (ATOM format)
    • server_time_unix — Server time when creating command (in Unix timestamp format with browser hour zone)
    • server_time_ago — Number of seconds expired from the moment of command sending
    • server_name — server name that sends command
    • revision — push & pull module revision for browser script
    • revisionMobile — push & pull module revision for mobile client
    • channel — channel ID (only for server version 1)

  Error handling

Various errors can occur when handling server. Its important to process errors correctly to avoid being blocked for possible suspicious activity.

When server connection results in errors, incrementally increase connection time:

  • When error occurs for the first time, connection delay — 100ms.
  • During repeated error — 15 seconds.
  • From 3 to 5 errors — 45 seconds.
  • From 5 to 10 errors — 10 minutes.
  • More than 10 errors in succession — 1 hour.

When errors occur more than 4х times during websocket handling, it’s recommended to start using Long polling. Most likely is the situation when client’s computer has websocket protocol blocked (exit code websocket 1006 and 1008).

Full transition to the Long polling is reasonable when you weren’t able to connect to websocket at all. In cases, when previously you had successful connections, its reasonable to temporarily switch to Long polling for 10 — 30 minutes.

  Format of incoming commands for managing the connection

To successfully manage Push & Pull protocol, ensure processing of control commands.

channel_expire

Command for expiration of channel worktime.

{
    "module_id" : "pull",
    "command" : "channel_expire",
    "params" : {
        "action" : "reconnect",
        "channel" : {
            "id" : "46a437d2336d4a88e4e9b3cd956ecf45.7910bb25e660bf211fdec15e33c5e25e4c3b644a",
            "type": "shared"
        },
        "new_channel": {
            "id": "fb9f7e13dc3d595c5aefe1a0216c27a2.2887eebc6ae160713a732893462dce9d8e23a7b0",
            "start": "2017-06-28T09:57:48+02:00",
            "end": "2017-06-28T21:57:48+02:00",
            "type": "shared"
        }
    }
}

Parameters

Parameter Description
action Description of required action.
channel Channel information that receives command.
new_channel Information about new channel. Available only if action == reconnect.

Command handling

In case of channel_expire command, depending on the value action, execute:

  • When action == reconnect, use the new_channel data to replace information about

    current channel

    channel contains information on which channel is currently in use >


    . Next, re-establish server connection again.
  • If action == get_config, disconnect from server, request new data on channels via REST pull.application.config.get. Then, re-establish server connection again.

config_expire и server_restart

Command for server settings update

{
    "module_id" : "pull",
    "command" : "config_expire",
    "params" : {}
}

Command handling

In case of config_expire or server_restart commands, disconnect from server and after arbitrary period of time (from 10 to 120 seconds), request new channel data via REST pull.application.config.get. Then, re-establish server connection.


Понравилась статья? Поделить с друзьями:
  • Bitrix mysql query error 1271 illegal mix of collations for operation union 400
  • Bitrix mysql query error 1054
  • Bitrix mysql connect error localhost 2002 no such file or directory 400
  • Bitrix main db connectionexception mysql connect error localhost
  • Bitrix main argumentexception json error 1 100