Коллеги, добрый день.
В дополнение к существующим на форуме, ещё одна проблема с push-server.
Вообще он работает, но при определенных условиях.
Расскажу по порядку:
Имеется Битрикс Корпоративный портал, поднятый на BitrixVM версии 7.4.3 в CentOS 7.
Для пользователей оказался важен функционал уведомлений в Веб-мессенджере. Т.е. один пользователь ищет собеседника из списка сотрудников и отправляет ему сообщение. Если собеседник находится на портале, то ему должно всплыть уведомление. На деле происходит следующее:
При отправке сообщения и у получателя и у отправителя в окне браузера с открытым порталом начинают постоянно перемигивать сообщения то на синем, то на коричневом фоне, сигнализирующие о том, что "Устанавливаем соединение с сервером" и "Соединение с сервером установлено". При это само уведомление о сообщении получателю не приходит.
При этом в логах сервера по пути /var/log/push-server тишина.
Чтоб разобраться в проблеме было принято решение поднять тестовый портал. Что и было сделано. Причем портал был поднят в тестовом сегменте сети, никак не связанном с тем сегментом, в котором работает продуктивный портал.
Каково же было удивление, когда на тестовом портале функционал уведомлений заработал с ходу, без каких-либо доп. настроек, кроме Install/Update NodeJS RTC service через ssh консоль.
Стали выяснять обстоятельства и выяснили, что продуктивный портал и клиентские машины пользователей находятся в разных сегментах сети. Данные сегменты (подсети) имеют разные гейтвеи (gateway/шлюз) и общаются через маршрутизатор. Казалось бы, что вы этом особенного? Обычная топология сети. Но это оказалось важным.
Решили поднять машину с Windows 10 в серверной подсети, там же где и продуктивный портал. И оказалось, что с данной машины функционал уведомлений работает как надо. Тот же самый продуктивный портал. Без каких каких-либо доп. настроек. Просто поместили и сервер и клиент в "плоскую" сеть.
Продолжил дальнейшее разбирательство, поговорив с коллегами разработчиками, которые в своих разработках используют websocket. Они мне поведали о том, что websocket представляет из себя tcp туннель, который поднимается между сервером и браузером и позволяет осуществлять двунаправленную передачу данных в реальном времени. За счет чего, собственно, и срабатывают уведомления на сайте.
А ещё рассказали печальную историю о том, что есть сетевое оборудование, коммутаторы и маршрутизаторы, которые любят оптимизировать соединения внутри себя, и если видят, что через конкретное соединение не происходит передача данных, то обрывают его. А оконечные устройства об этом не подозревают и пытаются слать данные через уже разорванное соединение, в результате чего, применительно к Битрикс, мы наблюдаем сообщения на коричневом и голубом фоне, о которых было рассказано выше.
Также поделились знаниями о том, что websocket не обладает стандартным функционалом поддержания установленного соединения, так называемого keepalive. Чтоб оно не разрывалось, требуется самостоятельно кодить функционал, осуществляющий постоянную передачу "пустых" данных, чтобы коммутатор между сервером и клиентом видел, что какие-то данные передаются и не рвал соединение, а поддерживал его.
В связи с выше описанной проблемой вопросы:
1. Реализован ли в push-server Битрикс функционал поддержания соединения websocket? Если да, то где он включается/настраивается? Во всех найденных конфигах по путям /opt/push-server и /etc/push-server ничего похожего на то, что мне нужно не нашлось.
2. Если не поддерживает, то какие ещё способы борьбы с данной проблемой могут быть?
(переделывать всю сетку предприятия в плоскую не предлагать)
Прошу прощения за объем. Наболело.
В дополнение к существующим на форуме, ещё одна проблема с push-server.
Вообще он работает, но при определенных условиях.
Расскажу по порядку:
Имеется Битрикс Корпоративный портал, поднятый на BitrixVM версии 7.4.3 в CentOS 7.
Для пользователей оказался важен функционал уведомлений в Веб-мессенджере. Т.е. один пользователь ищет собеседника из списка сотрудников и отправляет ему сообщение. Если собеседник находится на портале, то ему должно всплыть уведомление. На деле происходит следующее:
При отправке сообщения и у получателя и у отправителя в окне браузера с открытым порталом начинают постоянно перемигивать сообщения то на синем, то на коричневом фоне, сигнализирующие о том, что "Устанавливаем соединение с сервером" и "Соединение с сервером установлено". При это само уведомление о сообщении получателю не приходит.
При этом в логах сервера по пути /var/log/push-server тишина.
Чтоб разобраться в проблеме было принято решение поднять тестовый портал. Что и было сделано. Причем портал был поднят в тестовом сегменте сети, никак не связанном с тем сегментом, в котором работает продуктивный портал.
Каково же было удивление, когда на тестовом портале функционал уведомлений заработал с ходу, без каких-либо доп. настроек, кроме Install/Update NodeJS RTC service через ssh консоль.
Стали выяснять обстоятельства и выяснили, что продуктивный портал и клиентские машины пользователей находятся в разных сегментах сети. Данные сегменты (подсети) имеют разные гейтвеи (gateway/шлюз) и общаются через маршрутизатор. Казалось бы, что вы этом особенного? Обычная топология сети. Но это оказалось важным.
Решили поднять машину с Windows 10 в серверной подсети, там же где и продуктивный портал. И оказалось, что с данной машины функционал уведомлений работает как надо. Тот же самый продуктивный портал. Без каких каких-либо доп. настроек. Просто поместили и сервер и клиент в "плоскую" сеть.
Продолжил дальнейшее разбирательство, поговорив с коллегами разработчиками, которые в своих разработках используют websocket. Они мне поведали о том, что websocket представляет из себя tcp туннель, который поднимается между сервером и браузером и позволяет осуществлять двунаправленную передачу данных в реальном времени. За счет чего, собственно, и срабатывают уведомления на сайте.
А ещё рассказали печальную историю о том, что есть сетевое оборудование, коммутаторы и маршрутизаторы, которые любят оптимизировать соединения внутри себя, и если видят, что через конкретное соединение не происходит передача данных, то обрывают его. А оконечные устройства об этом не подозревают и пытаются слать данные через уже разорванное соединение, в результате чего, применительно к Битрикс, мы наблюдаем сообщения на коричневом и голубом фоне, о которых было рассказано выше.
Также поделились знаниями о том, что websocket не обладает стандартным функционалом поддержания установленного соединения, так называемого keepalive. Чтоб оно не разрывалось, требуется самостоятельно кодить функционал, осуществляющий постоянную передачу "пустых" данных, чтобы коммутатор между сервером и клиентом видел, что какие-то данные передаются и не рвал соединение, а поддерживал его.
В связи с выше описанной проблемой вопросы:
1. Реализован ли в push-server Битрикс функционал поддержания соединения websocket? Если да, то где он включается/настраивается? Во всех найденных конфигах по путям /opt/push-server и /etc/push-server ничего похожего на то, что мне нужно не нашлось.
2. Если не поддерживает, то какие ещё способы борьбы с данной проблемой могут быть?
(переделывать всю сетку предприятия в плоскую не предлагать)
Прошу прощения за объем. Наболело.