С выходом версии платформы 1С:Предприятие 8.3.27 разработчики получили долгожданный инструмент — нативную поддержку протокола WebSocket. Это событие знаменует собой переход на новый уровень взаимодействия систем в реальном времени, позволяя отказаться от ресурсоемких «костылей» в виде постоянного опроса сервера (polling).
В этой статье мы подробно разберем, как устроена поддержка WebSocket в 1С, проанализируем архитектурные отличия от привычных HTTP-сервисов и научимся работать с новым объектом платформы ВебСокетКлиент.
Для начала давайте выясним причину, по которой WebSocket стал стандартом для современных интерактивных приложений. Традиционный протокол HTTP работает по принципу «запрос-ответ». Чтобы клиент (1С) узнал о новых данных на сервере, он должен отправить запрос. Если данных нет, соединение закрывается, а через секунду цикл повторяется. Это создает огромную нагрузку на сеть и сервер.
WebSocket работает иначе:
Рассмотрим сравнительную таблицу, чтобы закрепить понимание:
HTTP: Однонаправленный (клиент всегда инициатор), высокие задержки из-за пересоздания сессий, большой объем заголовков в каждом пакете.
WebSocket: Полнодуплексный (двусторонний), минимальные задержки, экономия трафика за счет отсутствия повторных заголовков.
В платформе 8.3.27 появился новый объект метаданных — ВебСокетКлиент. Важно понимать, что работа с ним строится исключительно на асинхронных вызовах. Это критически важно для того, чтобы интерфейс программы не «замирал» во время ожидания данных или установки соединения.
Рассмотрим основные методы, которые мы будем использовать:
ПодключитьсяАсинхронно() — инициирует соединение с сервером.ОтправитьАсинхронно() — отправляет данные (текст или двоичные данные) на сервер.ЗакрытьАсинхронно() — корректно завершает сеанс связи.Проанализируем процесс создания подключения. Нам потребуется создать экземпляр объекта и назначить обработчики событий. В 1С предусмотрено четыре ключевых события:
Посмотрим на пример кода для инициализации соединения:
&НаКлиенте
Процедура УстановитьСоединение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.
Для этого используется объект ВебСокетПараметрыИспользования. Мы можем программно задать:
Проанализируем ситуацию с доступностью функционала. На текущий момент платформа реализует только клиентскую часть WebSocket. Это означает:
Также стоит отметить, что функционал доступен в Тонком клиенте, Веб-клиенте (через движок браузера) и на Сервере. Это делает инструмент универсальным для интеграционных задач любой сложности.
Внимание: Начиная с версии 8.3.27, 1С прекратила поддержку устаревших ОС, таких как Windows XP и Windows Server 2008. Это цена перехода на современные сетевые протоколы, требующие актуальных библиотек безопасности.
Появление ВебСокетКлиент — это огромный шаг к созданию высокопроизводительных систем. Мы рассмотрели, как это работает «под капотом», научились настраивать асинхронные обработчики и поняли разницу между HTTP-запросами и постоянным соединением.