Передача данных с сервера на клиент через WebSocket NativeAPI и Centrifugo

Публикация № 1125876

Разработка - Системная интеграция - Интеграция

21
В статье описываю реализацию обмена для замены передачи сообщений через 1С Сервер взаимодействия.

Вводные:

1. Используем уведомления пользователей о входящих звонках.
2. Транспортом сообщений является "1С Сервер взаимодействия". В связи с лицензионной политикой дальнейшее использование невозможно.
 

Вариант решения:

1. Использование WebSocket соединений на клиентской части.
2. Использование HTTP API интерфейса на серверной. Поднимать WebSocket соединение на сервере неудобно.
 

Организация WebSocket сервера:

Первое что попалось при "гуглении" https://github.com/centrifugal/centrifugo. Прост в настройке и использовании.
Для тестирования скачал дистрибутив для windows c https://github.com/centrifugal/centrifugo/releases.
Запустить как сервис для windows не получилось, не передает код ответа и сервис не стартует.
Планирую запускать на виртуальной nix, дополнительно можно настроить безопасность с помощью NGINX.
 
Для запуска нужно
1. Распаковать zip архив
2. Запустить генерацию типового конфигурационного файла
centrifugo genconfig

3. Запустить сервис

centrifugo --config=config.json

Сервис запустится на localhost:8000

Реализация подключения клиента

Использую NatieAPI компоненту.

Компоненту приобрел у //infostart.ru/public/1112969/, умеет генерировать внешнее событие.

Подключение компоненты реализовал в общем модуле, сделал обращения к нему из МодуляПриложения
 
 Подключение компоненты

 

Далее анализирую сообщения от внешней компоненты

 
 Анализ сообщений от компоненты

 

И создаю подключение

 
 Создание подключения и подписка на канал

 

Для Аутентификации используется JWT, реализацию брал из //infostart.ru/public/611505/, исходный код https://github.com/pintov/1c-jwt

В качестве имени канала использую GUID текущего пользователя, смысла слать broadcast запросы в моей задаче нет. Канал создается при подписке на него хотя бы одного клиента. То что сообщения не будут доставлены до клиента при отключении в данный не критично, доставляю оперативные уведомления.

Обрабатываю сообщения от компоненты на клиенте

 
 Вариант обработки сообщений

 

Реализация отправки сообщений с сервера

Для отправки использую HTTP протокол

 
 Пример реализации отправки

 

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

 
 Пример настройки HTTP запроса

 

В результате получаем:

 

Реализовывал в виде расширения в которое включена компонента, поэтому все расширение не публикую.

Реализация проверки подключений и их восстановление (при перезагрузке WebSocket сервиса) в планах.

21

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Steelvan 23.09.19 11:41 Сейчас в теме
*) Для обертки приложения в службу можно использовать nssm https://www.nssm.cc/
*) Условно-бесплатная компонента для веб-гнезд с поддержкой "Внешнее Событие" https://infostart.ru/public/808432/
2. Steelvan 23.09.19 11:54 Сейчас в теме
Про "поднимать веб-гнезда на сервере сложно" согласен. Через костыли.
Что бы экземпляр компоненты жил в потоке на сервере этот самый поток надо создать.

Как вариант, написать фоновое задание, которое будет создавать поток.
Этот поток передать во внешнюю компоненту вызовом метода и удерживать его там, передавая управление 1С только при получении сообщения.

Пока Истина Цикл
Сообщение = ВнешняяКомпонента.ПолучитьСообщение() // Здесь поток замирает до получения сообщения
ОбработкаСообщения(Сообщение);
КонецЦикла

Для этого можно использовать https://infostart.ru/public/937068/
3. malikov_pro 152 23.09.19 14:08 Сейчас в теме
(2) В моем случае нет смысла,
1. если что-то нужно передать на сервер, то вызов серверного метода,
2. если нужно отправить сообщение другому пользователю то организовать канал public и в него писать.

В Публикации 937068 нет описания функций. Загонять в бесконечный цикл с ПолучитьСообщение() не самое лучшее решение. В той что использую используется нормальный механизм.
4. sivin-alexey 132 23.09.19 14:35 Сейчас в теме
У нас есть компонента CentrifugoClient (основана на WebSocketClient), которая уже заточена под Centrifugo. Используем её на предприятии уже больше года. Скоро опубликую.

В CentrifugoClient реализованы методы: 'Connect', 'Refresh', 'Disconnect', 'Subscribe', 'Unsubscribe', 'Publish', 'Presence', 'History', 'Ping', 'CreateToken'
5. sivin-alexey 132 23.09.19 14:36 Сейчас в теме
Пример обмена CentrifugoClient и Android будет рассмотрен в публикации.
6. user1286781 27.09.19 11:58 Сейчас в теме
Запустить как сервис для windows не получилось, не передает код ответа и сервис не стартует.


Вообще Centrifugo работает под Windows, по крайней мере запускается и пускает в административный веб-интерфейс:

C:\Users\admin>centrifugo.exe --admin
{"level":"info","time":"2019-09-27T11:50:44+03:00","message":"starting Centrifugo 2.2.2 (go1.12.6)"}
{"level":"info","time":"2019-09-27T11:50:44+03:00","message":"config path: C:\\Users\\admin\\config.json"}
{"level":"info","time":"2019-09-27T11:50:44+03:00","message":"pid: 12684"}
{"level":"info","time":"2019-09-27T11:50:44+03:00","message":"engine: Memory"}
{"level":"info","time":"2019-09-27T11:50:44+03:00","message":"gomaxprocs: 4"}
{"level":"info","time":"2019-09-27T11:50:44+03:00","message":"serving websocket, SockJS, API, admin endpoints on :8000"}
{"level":"info","time":"2019-09-27T11:53:11+03:00","message":"signal received: interrupt"}
{"level":"info","time":"2019-09-27T11:53:11+03:00","message":"shutting down, wait..."}
Показать
7. malikov_pro 152 29.09.19 09:39 Сейчас в теме
(6) В ручную запустить возможно, но настроить запуск как "Службу" (чтобы запускалась при запуске windows без необходимости запускать сеанс пользователя) у меня не получилось. Пробовал https://support.microsoft.com/ru-ru/help/251192/how-to-create-a-windows-service-by-using-sc-exe. Для меня не критично, потому что планирую развернуть на отдельной виртуальной машине с ubuntu.
Оставьте свое сообщение

См. также

Оповещения боту из 1С за 31 минуту 121

Статья Программист Нет файла v8::УФ 1cv8.cf Бесплатно (free) Практика программирования Интеграция

Поделюсь опытом, как быстро сделать бота с оповещениями в Телеграмм из 1С без лишних затрат.

18.09.2019    8455    4    feva    31       

Обмен данными. Консистентность vs Многопоточность 25

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Интеграция

Рассмотрим теоретические основы обмена данными. Какие бывают обмены, какие гарантии при этом даются, зачем идти на компромиссы и что при этом может пойти не так. Есть ли идеальная схема?

03.09.2019    3116    m-rv    1       

Как организовать консолидацию данных из трех десятков предприятий, не привлекая программистов на местах? 7

Статья Программист Руководитель проекта Нет файла v8 1cv8.cf MS SQL Бесплатно (free) Интеграция

Какую архитектуру и технологии выбрать для организации обмена между «зоопарком» разных конфигураций и системой, принципиально отличающейся от 1С, как наладить такой обмен без изменения конфигурации и организовать мониторинг из единого центра, расскажет докладчик конференции INFOSTART EVENT 2018 EDUCATION Александр Бобрышов. 

15.07.2019    1682    ShurikDM    4       

Система питания в офисе: как совместить вендинговые автоматы, 1С, облачную кассу и веб-технологии 6

Статья Руководитель проекта Нет файла v8 1cv8.cf Розничная и сетевая торговля (FMCG) Россия УУ Розничная торговля Бесплатно (free) Интеграция

В начале 2019 года тенденция развития автоматов питания в России привела к появлению проекта нового формата питания на работе — МикроМаркета “Го!Поедим”. Потребовалось создать новый формат зоны питания сотрудников: интегрировать в офисные кухни полноценные МикроМаркеты с бесконтактной оплатой, кофе-машинами, лаунж-зоной. Если правильно совместить вендинговые автоматы, облачную кассу, 1С и веб-технологии, то в результате будут не только сытые сотрудники, но и корректная работа всей системы офисного питания.

22.06.2019    1774    antonovintervolga    6       

RabbitMQ + Конвертация Данных 3.0 178

Статья Системный администратор Программист Бизнес-аналитик Руководитель проекта Нет файла v8 КД Бесплатно (free) Внешние источники данных Обмен через XML Интеграция Перенос данных из 1C8 в 1C8

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

21.03.2019    13737    barelpro    82       

Переход на "Зарплату и управление персоналом 3.1" 35

Статья Программист Бухгалтер Пользователь Нет файла v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Управление персоналом (HRM) Бесплатно (free) Интеграция Пользователю системы Бухгалтерский учет

Сменила я тут работу и уже после того, как я приступила к исполнению обязанностей, мой новый начальник мне призналась, что выбор пал на меня только из-за того, что я знаю программу. Справедливости ради, эта уверенность была основана только на том, что я прошла тестирование, включающее только основные операции кадрового делопроизводства. Так или иначе, а работодатель попал в точку, нанимая меня в надежде, что я решу проблему: нужно перейти «с 8.2 на 8.3». Ничего сложного, скажет большинство, я тоже так говорю, но ситуация осложнялась некоторым количеством предшественников, которые уже «нафеячили» в программах до меня. Взять и сделать все заново мне не разрешили, так что пришлось исходить из того, что есть, и именно это дало пищу для размышлений и, в конце концов, привело к написанию этих рекомендаций. Если перед Вами стоит задача перехода с ЗУП 2.5 на ЗУП 3.1, я попробую облегчить Вам жизнь этой статьей.

01.02.2019    6819    VKuser24804875    33       

Выбор программы 1С 4

Статья Пользователь Нет файла v8 1cv8.cf Россия Бесплатно (free) Пользователю системы Интеграция Управление проектом

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

16.01.2019    4173    itworks    21       

Проектирование архитектуры и модификация программных продуктов как технология в сложных проектах системной интеграции и автоматизации на базе 1С: СППР 52

Статья no Нет файла v8 1С:Франчайзи, автоматизация бизнеса Бесплатно (free) Управление проектом Интеграция СППР

Как сделать проектирование функциональной архитектуры ПО технологией. Цель - устранить ряд типовых проблем на сложных проектах. Как использовать для решения этих задач 1С система проектирования прикладных решений (СППР). Статья полезна для директоров франчайзи, системных интеграторов, руководителей проектов, архитекторов и консультантов.

03.10.2018    9232    roman72    19       

Как написать обмен с 50 поставщиками и не сойти с ума. Теория 5

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Интеграция

Поставщики бывают разные. Одни готовы подстроиться под наш формат - другие нет; одни обмениваются SOAPом - другие RESTом; одни работают с кодами товаров - другие с идентификаторами предложений; одни готовы отдать статус по заказу - другие нет; у одних есть справочники, элементы которых вам нужно сопоставить со своими - у других нет. В общем очень разные.

09.04.2018    8444    m-rv    12       

Может ли 1С выйти на рынок B2C 14

Статья no Нет файла v8 Бесплатно (free) Интеграция

Размышляя о том, может ли 1С втиснуться на рынок сервисов типа Slack, Wrike и им подобных, текст незаметно углубился в размышления о том, где граница применимости платформы 1С. Что будет, если 1С пойдет на рынок таких продуктов и возможно ли это вообще. Рассказал свое представление о том, где у 1С есть преимущества и где слабые стороны. Получился такой себе вырожденный SWAT-анализ. Но без таблиц. Только буквы, только хардкор.

15.08.2017    10774    WanGoff    76       

Что такое HMAC и JWT и как это использовать в 1С 94

Статья Программист Архив с данными v8 1cv8.cf Абонемент ($m) Внешние источники данных

Лёгкая статья про стандарты HMAC и JWT с небольшой теорией и исходным кодом.

1 стартмани

20.04.2017    15060    74    keypax    37       

Обмен сообщениями. Что это? 35

Статья Программист Нет файла v8 Бесплатно (free) Интеграция

Большая часть моей работы посвящена интеграции приложений. Очень странно, что для «1С:Предприятие 8» нигде не описаны промышленные шаблоны интеграции, а если и есть какая-то информация — то ее очень мало. Цель данной статьи (или цикла статей, как получится) стало желание поделится опытом, источниками информации и самое главное полезными книгами.

27.10.2016    18492    pbazeliuk    11       

Контур.EDI изнутри, или история командной разработки тиражного продукта на 1С 174

Статья Программист Нет файла v8 Россия УУ Windows Оптовая торговля Бесплатно (free) Интеграция Практика программирования Математика и алгоритмы

“Система - больше, чем просто совокупность ее элементов”; “Несколько разработчиков - это еще не команда разработки”. Расскажу, как мы прочувствовали эти очевидные утверждения на своей шкуре.

17.11.2015    35474    skif47    88       

Интеграция 1С с Perco 5

Статья Программист Нет файла v8 УПП1 Россия Windows Бесплатно (free) Интеграция

Как работать с базой электронной проходной Perco через 1С.

16.10.2014    26206    Alex33614    16       

Автоматизация компании ЖКХ: задачи и решения 13

Статья no Нет файла v8 Энергетика и ЖКХ Россия Бесплатно (free) Интеграция

Отрасль жилищно-коммунального хозяйства мы до сих пор видели в двух ипостасях. Это оставшиеся с советских времен, жутко неэффективные МУПы и ДЭЗы и новоиспеченные фирмы, дорвавшиеся к «большим» деньгам ЖКХ, при этом тут же попавшие в шумные скандалы о растратах и неэффективном управлении. Но потихоньку ситуация меняется. Приходят на руководящие должности разумные люди, создаются управляющие компании целью которых становиться не «урвать и сбежать», а нормально работать и зарабатывать.

29.05.2011    9521    verybig    14