Осваиваем протокол gRPC по HTTP/2 в 1С

24.05.22

Разработка - Языки и среды

Не так давно на форуме была заведена тема по интеграции с распределенным реестром под 1С, и был выявлен следующий момент, что текущие релизы платформы не поддерживают соединение по HTTP/2 для протокола gRPC. В этой публикации разберем, как удалось решить этот вопрос.

Начнем с определения gRPC и почему он вдруг понадобился.

gRPC (Remote Procedure Calls) — это система удалённого вызова процедур (RPC) с открытым исходным кодом, первоначально разработанная в Google в 2015 году. В качестве транспорта используется HTTP/2, в качестве языка описания интерфейса — Protocol Buffers. gRPC предоставляет такие функции, как аутентификация, двунаправленная потоковая передача и управление потоком, блокирующие или неблокирующие привязки, а также отмена и тайм-ауты. Генерирует кроссплатформенные привязки клиента и сервера для многих языков. Следуя из определения, технология должна решать межсервисные взаимосвязи на разных языках программирования, но в нашем случае это все не про 1С. Поддерживаемый транспорт на текущий момент это HTTP/1.1 и он не подходит. Список языков перечислен на домашней странице протокола gRPC и практически охватывает весь возможный современный спектр.

Ранее в проектах уже проводилась работа с использованием JavaScript, поэтому остановимся на выборе node.JS, но более родное для 1С под windows будет конечно же C#, т.е. gRPC for .NET, установка которого в целом полностью аналогична и возможно 1С также сможет запустить этот проект через внешний скрипт *.сs командой dotnet run -f netcoreapp2.1.

В качестве примера серверная часть будет работать на Windows, и его сервисная служба реализована на node.JS, дефолтовый порт службы для связи 50051. Нам потребуется установка NODE, скачиваем ее и производим инсталяцию. Для проверки в командной строке PowerShell введем npm -v и node -v , при успешном результате получим ответ об установленной  версии. После чего разворачиваем уже сам пакет gprc через команду $ npm install grpc

Установленный пакет уже содержит примеры работы клиентской и серверной частей, для этого нужно только перейти через командную строку PowerShell в нужную нам директорию и запустить скрипты:

Из examples/node/dynamic_codegenкаталога:

  1. Запустите сервер:

    $ node greeter_server.js
    
  2. С другого терминала запустите клиент:

    $ node greeter_client.js
    

Поздравляем! Вы только что запустили клиент-серверное приложение с gRPC. 

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

  WshShell = Новый COMОбъект("wscript.shell"); 
  WshShell.Run("wscript.exe ""greeter_client.js""); 

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

 Скрипт = Новый ТекстовыйДокумент(); 
        Скрипт.УстановитьТекст 
        ( 
        "....какой то код на JS;" 
        ); 
        Скрипт.Записать("greeter_client.js", КодировкаТекста.ANSI); 

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

...и да, пример самого скрипта со стороны клиентской части, если его не удалось найти самостоятельно:

  var client = new hello_proto.Greeter('localhost:50051',
                                       grpc.credentials.createInsecure());
  client.sayHello({name: 'you'}, function(err, response) {
    console.log('Greeting:', response.message);
  });

 

gPRC node.js C# *.cs *.js

См. также

Простое приложение на Dart

Языки и среды Бесплатно (free)

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

08.08.2023    2546    acvatoris    3    

12

Статический анализатор кода 1С на Си

Языки и среды Платформа 1С v8.3 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    2579    prohorp    15    

8

Сквозная задача на Исполнителе - часть первая (IMAP)

Языки и среды Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    1681    0    kembrik    2    

6

1С# - Расширяем код 1С кодом на C#

Языки и среды Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Вставки кода на C# внутри кода на 1С.

7 стартмани

07.04.2023    8314    4    SerVer1C    51    

40

Независимая разработка совместимых компонент на ORM 1С – миф или истина где-то в аннотациях Java?

Языки и среды Платформа 1С v8.3 Бесплатно (free)

При работе с 1С ORM (object relation mapping) все время преследует ощущение постоянного создания монолитного приложения — один раз привязался к какой либо сущности (например, справочник Контрагенты), и весь код заполнен ссылками на эту конкретную реализацию. Можно ли независимо разрабатывать в ORM совместимые между собой справочник «Контрагентов» и использующий его документ «Платежное поручение», но при этом избежать жестких зависимостей? Спасут ли нас микросервисы? Пример на аннотациях Java демонстрирует, как это возможно делать.

13.03.2023    851    1CUnlimited    0    

2

xPath в 1С

Файловый обмен (TXT, XML, DBF), FTP Языки и среды Платформа 1С v8.3 Бесплатно (free)

Опыт работы методами языка xPath в 1С.

04.03.2023    4499    DemetrKlim    40    

46

Случай "Массив, Структура и Таблица в JS плюс верстка техдемо"

WEB-интеграция Языки и среды Платформа 1С v8.3 Абонемент ($m)

Добавление в JS обозревателя 1Сных коллекций массив, структура и таблица значений. Строкование в json формат для обмена с 1Сным сервером.Убедимся, что в обозревателе 1Сные коллекции действительно работают через чтение, изменение и строкование объекта обратно в json строку.

10 стартмани

01.03.2023    1635    Steelvan    0    

5

Data science. Скажи мне, брат, трансформер...

Языки и среды Нейросети Бесплатно (free)

Какой же data science без нейросетей! Тема чрезвычайно большая и местами сложная. Но в данной статье сложностей не будет. То, что я вам расскажу сейчас, можно охарактеризовать следующими словами: Никогда еще столь доступное не было столь важным.

11.12.2022    1663    mkalimulin    15    

12
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1272 24.05.22 15:03 Сейчас в теме
На картинке сервер Java, в заголовке утверждение что "текущие релизы платформы не поддерживают соединение по HTTP/2 для протокола gRPC", к концу статьи понятно что имеется ввиду клиентская часть. В коде приведен непонятный пример с использованием "COMОбъект" и костылями через файл..

Опишите пожалуйста в каком контексте используете и почему не хватило JSON RPC например.

https://infostart.ru/1c/articles/1541021/ - описание стандарта,
https://infostart.ru/1c/articles/1645365/ - описание документирования.
Так же в публикациях есть реализации пары клиентов.
2. JetBrain 77 24.05.22 16:26 Сейчас в теме
(1) да , на картинке с Java сервером, но это не имеет значения, это может быть любая реализация С++, C#, Python, Java, Node и прочие из списка доступных языков, в этом и межсервисная "прелесть". gRPC обладает буферами протоколов определяющие структуры данных, которые вы хотите сериализовать в прото-файле и компилятором этого буфера. Клиентское приложение может напрямую вызывать метод серверного приложения на другом компьютере, как если бы это был локальный объект. Все это ориентированно на большую производительность через двоичное кодирование и мультиплексирование вызовов через всего одно соединение. Более подробно это все описано на домашней странице протокола ссылка была в публикации.
..."текущие релизы платформы не поддерживают соединение по HTTP/2" - это речь про платформы 1С.
3. JetBrain 77 25.05.22 09:36 Сейчас в теме
(1) если на клиенте вы использовали
БезопасноеСоединение = Новый HTTPСоединение(URI.ИмяСервера,443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
то к сожалению это только HTTP/1.1 и через него gRPC не пройдет, а у нас в примере интеграция с конкретным сервером и выбора нет другого, кроме как городить внешний файл скрипта.
4. malikov_pro 1272 25.05.22 15:47 Сейчас в теме
(2) У меня вызывает диссонанс "производительность" и COMОбъект. Что gRPC хорош это понятно, но прото-файл еще нужно уметь готовить.
"Не так давно на форуме была заведена тема по интеграции с распределенным реестром под 1С" - будет полезна ссылка на источник.

(3) Если в организации уже используется gRPC, то вариант через NativeAPI собирать обмен, с нагрузками когда оно может быть применено не сталкивался. С другой стороны "прямой вызов" это усиление связанности и при больших потоках применяют очереди Rabit, Kafka итд.
5. JetBrain 77 25.05.22 16:02 Сейчас в теме
(4) COMОбъект на сервер не влияет, но на клиенте понятно не лучший вариант, не ждать же когда 1с сделают поддержку. ссылка на форум Создаем распределенный реестр для 1С , за решение есть вознаграждение, если получится подобрать другое решение будет круто.
8. JetBrain 77 26.05.22 07:30 Сейчас в теме
(4) заменить использование COMОбъекта можно вариантами с применением HTML, разбор ответов всего скорей тоже будет удобнее:
https://infostart.ru/1c/articles/570446/
https://infostart.ru/public/398366/
https://infostart.ru/1c/articles/1355214/
6. malikov_pro 1272 25.05.22 20:14 Сейчас в теме
(5) Не увидел обратной связи с требованиями по скорости, если не критично то накатывается REST и работается через него
https://hyperledger.github.io/composer/v0.19/integrating/getting-started-rest-api
Упоминание нашел в https://infostart.ru/1c/articles/849888/.
Со своей стороны диалог закрываю, т.к. блокчейн не моя специализация и ресурсы планирую тратить на другие темы.
7. JetBrain 77 25.05.22 20:52 Сейчас в теме
(6) composer другой проект, под него возможно и подходит, пример описан под iroha. с автором указанной статьи и разбирали HTTP/2 в комментах форума он же)
Оставьте свое сообщение