Внешняя компонента для работы по 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 не будет опубликован. Обязательные поля помечены *