Как использовать протокол WebSocket в 1С:Предприятие 8.3.27 для двусторонней связи в реальном времени?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

С выходом версии платформы 1С:Предприятие 8.3.27 разработчики получили долгожданный инструмент — нативную поддержку протокола WebSocket. Это событие знаменует собой переход на новый уровень взаимодействия систем в реальном времени, позволяя отказаться от ресурсоемких «костылей» в виде постоянного опроса сервера (polling).

В этой статье мы подробно разберем, как устроена поддержка WebSocket в 1С, проанализируем архитектурные отличия от привычных HTTP-сервисов и научимся работать с новым объектом платформы ВебСокетКлиент.

В чем принципиальное отличие WebSocket от HTTP?

Для начала давайте выясним причину, по которой WebSocket стал стандартом для современных интерактивных приложений. Традиционный протокол HTTP работает по принципу «запрос-ответ». Чтобы клиент (1С) узнал о новых данных на сервере, он должен отправить запрос. Если данных нет, соединение закрывается, а через секунду цикл повторяется. Это создает огромную нагрузку на сеть и сервер.

WebSocket работает иначе:

  1. Устанавливается единственное соединение (Handshake) через HTTP.
  2. Протокол переключается на бинарный двунаправленный поток данных.
  3. Соединение остается открытым. Сервер может «толкнуть» данные клиенту в любой момент без запроса со стороны последнего.

Рассмотрим сравнительную таблицу, чтобы закрепить понимание:

HTTP: Однонаправленный (клиент всегда инициатор), высокие задержки из-за пересоздания сессий, большой объем заголовков в каждом пакете.

WebSocket: Полнодуплексный (двусторонний), минимальные задержки, экономия трафика за счет отсутствия повторных заголовков.

Объект ВебСокетКлиент и асинхронная модель

В платформе 8.3.27 появился новый объект метаданных — ВебСокетКлиент. Важно понимать, что работа с ним строится исключительно на асинхронных вызовах. Это критически важно для того, чтобы интерфейс программы не «замирал» во время ожидания данных или установки соединения.

Рассмотрим основные методы, которые мы будем использовать:

Разберем по шагам: реализация подключения

Проанализируем процесс создания подключения. Нам потребуется создать экземпляр объекта и назначить обработчики событий. В 1С предусмотрено четыре ключевых события:

  1. ПриОткрытии — соединение установлено, можно начинать обмен.
  2. ПриПолученииСообщения — сервер прислал данные.
  3. ПриОшибке — произошел сбой сети или протокола.
  4. ПриЗакрытии — связь разорвана.

Посмотрим на пример кода для инициализации соединения:


&НаКлиенте
Процедура УстановитьСоединениеWS()
    
    КлиентWS = Новый ВебСокетКлиент;
    
    // Настраиваем обработчики событий через ОписаниеОповещения
    ОповещениеПриОткрытии = Новый ОписаниеОповещения("ПриОткрытииСоединения", ЭтотОбъект);
    ОповещениеПриПолучении = Новый ОписаниеОповещения("ПриПолученииДанных", ЭтотОбъект);
    ОповещениеПриОшибке = Новый ОписаниеОповещения("ПриВозникновенииОшибки", ЭтотОбъект);
    ОповещениеПриЗакрытии = Новый ОписаниеОповещения("ПриЗакрытииСоединения", ЭтотОбъект);
    
    КлиентWS.УстановитьОбработчикПриОткрытии(ОповещениеПриОткрытии);
    КлиентWS.УстановитьОбработчикПриПолученииСообщения(ОповещениеПриПолучении);
    КлиентWS.УстановитьОбработчикПриОшибке(ОповещениеПриОшибке);
    КлиентWS.УстановитьОбработчикПриЗакрытии(ОповещениеПриЗакрытии);
    
    // Подключаемся к эхо-серверу для теста
    КлиентWS.ПодключитьсяАсинхронно("wss://echo.websocket.org");
    
КонецПроцедуры

Обработка входящих данных

Когда сервер присылает сообщение, срабатывает назначенный нами обработчик. Выясним, как правильно принять данные. Платформа поддерживает как обычный текст (JSON, XML), так и ДвоичныеДанные. Это открывает возможности для прямой интеграции с торговым оборудованием, системами мониторинга и SNMP-оповещениями или реализации прямого обмена сообщениями с Telegram без использования сторонних ботов.


&НаКлиенте
Процедура ПриПолученииДанных(Сообщение, ДополнительныеПараметры) Экспорт
    
    // Сообщение имеет тип ВебСокетСообщение
    Данные = Сообщение.Данные;
    
    Если ТипЗнч(Данные) = Тип("Строка") Тогда
        Сообщить("Получен текст: " + Данные);
    ИначеЕсли ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
        Сообщить("Получены бинарные данные, размер: " + Данные.Размер());
    КонецЕсли;
    
КонецПроцедуры

Безопасность и авторизация

Разберем важный аспект безопасности. 1С поддерживает защищенный протокол wss:// (WebSocket Secure), работающий поверх TLS. При создании соединения мы можем передать дополнительные параметры авторизации. Рассмотрим подробнее, как добавить заголовки HTTP (например, Bearer token) или Cookies, которые часто требуются современным API.

Для этого используется объект ВебСокетПараметрыИспользования. Мы можем программно задать:

Ограничения и важные нюансы версии 8.3.27

Проанализируем ситуацию с доступностью функционала. На текущий момент платформа реализует только клиентскую часть WebSocket. Это означает:

Также стоит отметить, что функционал доступен в Тонком клиенте, Веб-клиенте (через движок браузера) и на Сервере. Это делает инструмент универсальным для интеграционных задач любой сложности.

Внимание: Начиная с версии 8.3.27, 1С прекратила поддержку устаревших ОС, таких как Windows XP и Windows Server 2008. Это цена перехода на современные сетевые протоколы, требующие актуальных библиотек безопасности.

Заключение

Появление ВебСокетКлиент — это огромный шаг к созданию высокопроизводительных систем. Мы рассмотрели, как это работает «под капотом», научились настраивать асинхронные обработчики и поняли разницу между HTTP-запросами и постоянным соединением.

← На главную