Внешняя компонента для работы по Web-socket протоколу


Кто когда-нибудь сталкивался с обменом данными по Web-Socket (wss) протоколу из 1С, тому известно, что в платформе отсутствуют данные механизмы (не путать с HTTP запросами и WebServices). Предлагается использовать внешнюю компоненту, написанную по технологии NativeAPI, для подключения и обмена с серверами из 1С-Предприятия, работающими по протоколу Web-Socket.

Компонента работает в асинхронном режиме "Запрос-Ответ", при этом выполняется стабильное удержание подключения с сервером (как в случае TCP). Выполняется контроль ошибок на всех этапах работы ВК, возможность указания файла для ведения логов работы клиента WSS.

В поставку входит внешняя обработка, пример подключения и обмена данными с внешней компонентой. Все необходимые комментарии и разъяснения приведены в модуле формы внешней обработки. Обработка выполнена на упр. формах.

Подходит для таких разработок как: обмен с виртуальными АТС, или таким облачным сервисом как — "Мои звонки", обмен с сайтами статистики и т.д. (все где используется wss протокол).

Технология внешних компонент Native API поддерживается с версии платформы 8.2, рекомендуемая версия для работы 8.3. Релиз версий не играет роли и не привязан к работе самой ВК. Поддерживается только x86 платформа!

25.03.19

Добавлено свойство (и параметр в методе) "origin" — для специфических подключений;

Добавлен объект "Прокси" — для подключения к wss через прокси-сервер (метод "УстановитьПрокси" или через свойства), подробности в комментариях обработки-примера

Причины купить

Поддержка и помощь разработчика при внедрении

Достоинства

  • Простота в использовании (подключении);
  • Высокая скорость обмена;
  • Исключены ошибки в работе компоненты.

61 Comments

  1. azubar

    Нашел способ работать с WebSocket из 1С используя хтмл поле, надо применить фикс:

    <met a http-equiv=»X-UA-Compatible» content=»IE=Edge» />

    Вот код для теста:

    <!DO CTYPE html>
    <HEAD>
    <met a http-equiv=»X-UA-Compatible» content=»IE=Edge» />
    <met a charset=»utf-8″ />
    <title>WebSocket Test</title>
    </HEAD>
    
    <sc ript language=»javascript» type=»text/javascript»>
    
    var wsUri = «ws://echo.websocket.org/»;
    var output;
    
    function init()
    {
    output = document.getElementById(«output»);
    testWebSocket();
    }
    
    function testWebSocket()
    {
    websocket = new WebSocket(wsUri);
    websocket.on open = function(evt) { onOpen(evt) };
    websocket.on close = function(evt) { onClose(evt) };
    websocket.on message = function(evt) { onMessage(evt) };
    websocket.on error = function(evt) { onError(evt) };
    }
    
    function onOpen(evt)
    {
    writeToScreen(«CONNECTED»);
    doSend(«WebSocket rocks»);
    }
    
    function onClose(evt)
    {
    writeToScreen(«DISCONNECTED»);
    }
    
    function onMessage(evt)
    {
    writeToScreen(‘<span style=»color: blue;»>RESPONSE: ‘ + evt.data+'</span>’);
    websocket.close();
    }
    
    function onError(evt)
    {
    writeToScreen(‘<span style=»color: red;»>ERROR:</span> ‘ + evt.data);
    }
    
    function doSend(message)
    {
    writeToScreen(«SENT: » + message);
    websocket.send(message);
    }
    
    function writeToScreen(message)
    {
    var pre = document.createElement(«p»);
    pre.style.wordWrap = «break-word»;
    pre.innerHTML = message;
    output.appendChild(pre);
    }
    
    window.addEventListener(«load», init, false);
    
    </sc ript>
    
    <h2>WebSocket Test</h2>
    
    <div id=»output»></div>
    

    Показать

    Reply ↓
  2. Ditron

    (1) Как вариант, но не совсем то… просто отправить строку и вывести ответ, да, а получать постоянные события (буферизируемые), потому-как их может быть много (ответов).

    Reply ↓
  3. azubar

    (2) Какие методы поддерживает компонента? можно более детальное описание?

    Reply ↓
  4. Ditron

    (3) Конечно!

    Методы:

    1. Подключить(Домен, Порт, Параметры, TLS, ИмяЛогФайла):

    Домен — (строка) сервер wss;

    Порт — (число) номер порта;

    Параметры — (строка) например: «/login.php?domain=domain.com&apikey=jsefagielfegfiufeg»…

    TLS — (булево) принудительное включение защищенного соединения TLS;

    ИмяЛогФайла — (строка) полный путь и имя к лог файлу (если пустая строка, не ведется).

    2. Отключить()

    3. Отправить(Данные):

    Данные — (строка) отправляемые данные.

    Свойства (устанавливаются только при не активном соединении):

    1. ГлубинаБуфераСобытий — (число) буфер событий «Внешнее событие» в 1С

    2. Домен — (строка) установка свойства «Домен»

    3. Порт — (число) установка свойства «Порт»

    4. Параметр — (строка) установка строки параметра (см. выше)

    События приходящие «ВнешнееСобытие» (Источник — «WssExt»):

    1. Событие — «Ошибка», Данные — текст ошибки;

    2. Событие — «Подключено», Данные — IP адрес сервера;

    3. Событие — «Отключено», Данные — код состояния;

    4. Событие — «Сообщение», Данные — текст строки ответа на запрос отправки

    Reply ↓
  5. Ditron

    Исправлены ошибки для подключений по SSL (TLS), добавлено свойство TLS (изменения доступны только при отключенном состоянии)

    Reply ↓
  6. mszsuz

    Покажите, пож-ста, манифест

    Reply ↓
  7. Ditron

    (6) манифест для добавления в архив макета?

    Reply ↓
  8. Ditron

    манифест для добавления в архив макета?

    Reply ↓
  9. Ditron

    (5)

    <?xml version=»1.0″ encoding=»UTF-8″?>

    <bundle xmlns=»http://v8.1c.ru/8.2/addin/bundle»>

    <component os=»Windows» path=»phonet.dll» type=»native» arch=»i386″/>

    <component os=»Windows» path=»phonet.dll» type=»native» arch=»x86_64″/>

    </bundle>

    Reply ↓
  10. Ditron

    (6) прошу прощения, в манифесте не то имя файла компоненты, но структура та-же ))

    Reply ↓
  11. puple_ast

    При подключении к нашему сервису выходит сообщение

    Ошибка. Error Decoding Header: Switching Protocols

    Дайте документацию …

    На тестовых примерах не работает.

    Reply ↓
  12. Ditron

    (11)Такая ошибка может быть из-за шифрования, если у вас защищенное соединение используйте свойство TLS, перед установкой соединения. И в инструкции к установке (файла поставки) сказано «Если используется вариант подключения по SSL (TLS), библиотеки libeay32 должны быть скопированы в папку установки 1С (bin)»

    Reply ↓
  13. Ditron

    (11)

    Методы:

    1. Подключить(Домен, Порт, Параметры, TLS, ИмяЛогФайла):

    Домен — (строка) сервер wss;

    Порт — (число) номер порта;

    Параметры — (строка) например: «/login.php?domain=domain.com&apikey=jsefagielfegfiufeg»…

    TLS — (булево) принудительное включение защищенного соединения TLS;

    ИмяЛогФайла — (строка) полный путь и имя к лог файлу (если пустая строка, не ведется).

    2. Отключить()

    3. Отправить(Данные):

    Данные — (строка) отправляемые данные.

    Свойства (устанавливаются только при не активном соединении):

    1. ГлубинаБуфераСобытий — (число) буфер событий «Внешнее событие» в 1С

    2. Домен — (строка) установка свойства «Домен»

    3. Порт — (число) установка свойства «Порт»

    4. Параметр — (строка) установка строки параметра (см. выше)

    5. TLS — защищенное соединение (https)

    События приходящие «ВнешнееСобытие» (Источник — «WssExt»):

    1. Событие — «Ошибка», Данные — текст ошибки;

    2. Событие — «Подключено», Данные — IP адрес сервера;

    3. Событие — «Отключено», Данные — код состояния;

    4. Событие — «Сообщение», Данные — текст строки ответа на запрос отправки

    Reply ↓
  14. Ditron

    (11)Если что-то не получиться, дайте ссылку на сервис и параметры авторизации, я протестирую и скажу в чем причина

    Reply ↓
  15. mr_best_23rus

    Хорошую штукенцию наваяли ! Может пригодится.

    Reply ↓
  16. Ditron

    (15)Так как то спонтанно получилось, писал под заказчика для софт-фона, и как оказалось альтернативы и аналогов нигде нет, вот и решил запилить универсал для людей…

    Reply ↓
  17. mr_best_23rus

    (16) Сколько соединений она тянет одновременно на рабочих проектах ?

    Reply ↓
  18. Ditron

    (17)у меня клиент, под которого изначально писал компоненту, 10 человек работают в софт-фоне (работающем на этой компоненте) проблем нет! Суть в том что компонента подключается под каждым пользователем на клиенте, хотя можно и на сервере…

    Reply ↓
  19. Ditron

    (17)а если вы про триды (потоки), то она задумана как однопоточная, создается один экземпляр клиента веб-сокет, хотя можно и переделать под многопоточность! ))

    Reply ↓
  20. Ditron

    А в оригинальной разработке (исходной) https://infostart.ru/public/808432/ реализован механизм телефонных линий внутри самой компоненты, код на паскале работет все равно быстрей чем в 1С 😉

    Reply ↓
  21. 1739712

    добрый день, вопрос

    при подключении можно задавать значение параметра origin ?

    Reply ↓
  22. popovm

    добрый день!

    есть ли возможность подключиться через прокси?

    Reply ↓
  23. popovm

    При подключении через Proxifier выдает сообщение

    Ошибка. Исключение, по причине: Error connecting with SSL.

    EOF was observed that violates the protocol

    Reply ↓
  24. Ditron

    (22)надо подумать…

    Reply ↓
  25. Ditron

    (23)напишите сюда, какие параметры подключения вы задаете

    Reply ↓
  26. Ditron

    (22)возможность есть, надо доработать, ждите… сообщу

    Reply ↓
  27. novichok20

    Добрый день. Скажите первая обработка для самой платформы, а вторая я так понимаю клиент для wss?

    Для постоянного прослушивания нужно делать регламентное задание или она способна получать от сервера сообщение? Мне нужно для мои звонки

    И скажите если купить код открыт?

    Reply ↓
  28. Ditron

    (27) Добрый! обработка там одна (как пример)

    Reply ↓
  29. Ditron

    (27) для «мои звонки» подходит, уже был клиент из Питера ) там только надо не забыть библиотеки SSL положить куда надо (они в комплекте)

    Reply ↓
  30. novichok20

    Хорошо. А принцип у нее какой? Запрос ответ. Или все таки она может слушать.

    У меня просто идея какая. Мне нужно получить входящий звонок и передать в срм

    Reply ↓
  31. Ditron

    (30) стабильное соединение по wss — естественно и отправка и прослушка, асинхронное соединение, смотрите пример в обработке, все данные приходят как внешнее событие

    Reply ↓
  32. novichok20

    Хорошо. Спасибо. Буду пробовать. Очень необходимо. Хотел писать клиента на Java. Но нашел вас))) если будут вопросы можно будет к вам обратится?

    Reply ↓
  33. Ditron

    (32)конечно! Но с мои звонки 100% все будет работать ) Да и с любым wss сервером

    Reply ↓
  34. novichok20

    (33)а какую качать? Первую или вторую?

    Reply ↓
  35. Ditron

    (34)ну вам же не нужны исходники, вам нужна готовая ) поэтому за 6

    Reply ↓
  36. capwell

    Вот хоть бы где нибудь было сказано, что это просто враппер от компоненты esegece! И библиотеку esegece нужно покупать отдельно!

    Reply ↓
  37. Ditron

    (36)я ее покупал для написания компоненты, если вы хотите использовать исходники, пожалуйста покупайте…

    Reply ↓
  38. capwell

    (37) Так у вас даже sgcWebSockets.dll нет в комплекте

    Reply ↓
  39. Ditron

    (38)а с чего вы взяли что она нужна?

    Reply ↓
  40. Ditron

    (38)вот именно что это не обертка sgcWebSockets.dll!!

    Объясните проблему вообще, или так, «-» чисто поставить на публикацию?

    Reply ↓
  41. capwell

    (40) потому что мне нужен был пример исходников, который обрабатывает WebSocket. А у Вас его нет!

    Просто перенаправление функций NativeAPI 1С в сторонюю библиотеку не является таким примером.

    Reply ↓
  42. capwell

    (40) ещё и продаёте по такой цене, как будто что то ценное…

    Reply ↓
  43. Ditron

    (41) т. е. вам нужно написать самому на Win API свой вєб сокет и не морочить мне голову! Вы хотели что бы я вам за 10 СМ выложил низкоуровневый код написанный на WinAPI, вы на Delphi писали вообще, компоненты и классы не используете? так может на асме тогда уже лучше!

    Reply ↓
  44. Ditron

    (44)ааа, понятно, конкуренция, можно ставить минусов сколько угодно, но внятного объяснения я так и не дождался, чем не устраивает…

    Reply ↓
  45. capwell

    (45) ответил, куда уж внятнее.

    Reply ↓
  46. Ditron

    (46)никаких сторонних библиотек не используется в случае использования конечного продукта (кроме бесплатных ssl входящих в комплект), вы же хотите использовать исходники, в описании к файлу исходников указано, что необходимо…

    Reply ↓
  47. capwell

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

    Reply ↓
  48. Ditron

    (49)это я уже понял, сожалею (

    Reply ↓
  49. AlexBax

    (19) Многопоточность реализована?

    Reply ↓
  50. AlexBax

    Подскажите, пожалуйста, компонента только под Windows? 1С работает и под Линуксом, и меня интересует именно эта платформа.

    Если под Линуксом не работает, можете ли собрать под Линукс?

    Если работает или можете собрать — какие зависимости?

    Reply ↓
  51. Ditron

    (52)можно собрать, но проверить не на чем

    Reply ↓
  52. Ditron

    (51)нет

    Reply ↓
  53. Ditron

    (51)если сильно нужно, можно добавить ))

    Reply ↓
  54. AlexBax

    (53)нужно собрать тогда) Для проверки можно поднять любую свежую сборку одной из вариантов Убунту (Лубунту, Кубунту) на виртуалке например, да и собирать же тоже под линуксом. Платформа 1С под линукс, тоже вроде не проблема.

    Но могу проверить и я)

    Внесите в код ограничение на период работы например (или любое другое, запрос ввода пароля при создании объекта wss или типа того — для теста пороль ввести не проблема, а использовать в продакшене уже не получится — дежурить у компа каждый раз это не работа)) ), для тестовой версии «под меня».

    Если все ОК или исправите в случае если не все — я куплю вашу компоненту.

    Если сами протестируете и скажете что работает — я поверю на слово).

    Выше спрашивал про реализацию многопоточности — в моем случае будет создаваться несколько фоновых заданий 1С, это отдельные процессы 1С с точки зрения выполнения. В каждом таком фоновом задании будет создаваться соединение wss и читаться поток. Если текущая версия это позволяет, то отлично. Если нет — тогда «если сильно нужно, можно добавить )) » — нужно.

    Чтобы было понятно применение — пишу торгового робота для работы с биржей, данные с биржы в режиме реального времени поступают по wss, по каждой паре котировки — свой поток, и отслеживать надо сразу несколько, в идеале все (но конечно в реальности будет от 2 до 10 максимум потоков). Если будет рабочая компонента — все значительно упростится, ибо в противном случае придется устанавливать соединение и принимать поток в файл средствами линукса, а файл уже парсить из 1С.

    Reply ↓
  55. AlexBax

    (56) Да, и забыл — установка соединения wss возможна «на сервере» в терминах 1С?

    Reply ↓
  56. Ditron

    (56)под линух соберу, но не так быстро, в течении недели, работы много, на счет многопоточности — если у вас отдельное ФЗ то вообще ничего не нужно дорабатывать, НО!!! — данные приходят как внешнее событие, т.е. асинхронно, тут надо думать, компонента подключится на сервере, но событиям не куда будет приходить

    Reply ↓
  57. Ditron

    (56)тут как вариант — дописать немного компоненту и делать обратное подключение через КОМ к 1С (с заведомо предоставленными параметрами) и вызывать вашу серверную процедуру (в глоб модуле с внешн соед) и туда сообщение пихать…

    Reply ↓
  58. AlexBax

    Главное — соберите под линукс) Клиент-сервер — это я обойду. Ну буду снимать внешнее событие и тут же отправлять на сервер тоже фоновым заданием, чтобы успевать. Главное чтобы работало чтение потока с wss

    Reply ↓
  59. AlexBax

    (59)В общем жду весточек о готовности под линукс.

    +7 916 218-4162 Александр — вайбер, вотсап, телега — маякните по готовности. Тут на сайте через неделю могу и не зайти — дел то полно.

    Reply ↓
  60. Ditron

    (60)ОК

    Reply ↓
  61. AlexBax

    (62) Как дела? Линукс сборка будет?

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *