Осваиваем протокол 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

См. также

Как вызвать скрипты на python в 1С по технологии NativeAPI

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

Будем писать свои скрипты на питоне и запускать их на 1С.

15.04.2024    1918    YA_418728146    11    

54

Зачем нам 1С:Элемент

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

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    10361    ROk_dev    67    

42

(Не) Строгая типизация 1С

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

Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.

16.01.2024    4839    SeiOkami    21    

55

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

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

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

08.08.2023    3452    acvatoris    6    

14

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

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

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

30.06.2023    3110    prohorp    15    

12

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

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

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

1 стартмани

01.06.2023    1978    0    kembrik    2    

7

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

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

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

7 стартмани

07.04.2023    9580    4    SerVer1C    56    

44

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

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

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

13.03.2023    1084    1CUnlimited    0    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1297 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 78 24.05.22 16:26 Сейчас в теме
(1) да , на картинке с Java сервером, но это не имеет значения, это может быть любая реализация С++, C#, Python, Java, Node и прочие из списка доступных языков, в этом и межсервисная "прелесть". gRPC обладает буферами протоколов определяющие структуры данных, которые вы хотите сериализовать в прото-файле и компилятором этого буфера. Клиентское приложение может напрямую вызывать метод серверного приложения на другом компьютере, как если бы это был локальный объект. Все это ориентированно на большую производительность через двоичное кодирование и мультиплексирование вызовов через всего одно соединение. Более подробно это все описано на домашней странице протокола ссылка была в публикации.
..."текущие релизы платформы не поддерживают соединение по HTTP/2" - это речь про платформы 1С.
3. JetBrain 78 25.05.22 09:36 Сейчас в теме
(1) если на клиенте вы использовали
БезопасноеСоединение = Новый HTTPСоединение(URI.ИмяСервера,443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
то к сожалению это только HTTP/1.1 и через него gRPC не пройдет, а у нас в примере интеграция с конкретным сервером и выбора нет другого, кроме как городить внешний файл скрипта.
4. malikov_pro 1297 25.05.22 15:47 Сейчас в теме
(2) У меня вызывает диссонанс "производительность" и COMОбъект. Что gRPC хорош это понятно, но прото-файл еще нужно уметь готовить.
"Не так давно на форуме была заведена тема по интеграции с распределенным реестром под 1С" - будет полезна ссылка на источник.

(3) Если в организации уже используется gRPC, то вариант через NativeAPI собирать обмен, с нагрузками когда оно может быть применено не сталкивался. С другой стороны "прямой вызов" это усиление связанности и при больших потоках применяют очереди Rabit, Kafka итд.
5. JetBrain 78 25.05.22 16:02 Сейчас в теме
(4) COMОбъект на сервер не влияет, но на клиенте понятно не лучший вариант, не ждать же когда 1с сделают поддержку. ссылка на форум Создаем распределенный реестр для 1С , за решение есть вознаграждение, если получится подобрать другое решение будет круто.
8. JetBrain 78 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 1297 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 78 25.05.22 20:52 Сейчас в теме
(6) composer другой проект, под него возможно и подходит, пример описан под iroha. с автором указанной статьи и разбирали HTTP/2 в комментах форума он же)
Оставьте свое сообщение