Отправка сообщений


Внешняя компонента и сервер отправки сообщений клиентам с сервера / от других клиентов.

Часто необходимо оповестить пользователя о наступлении какого-то события, например, что из web-сервиса получено задание на печать или информацию об этапах выполнения длительного фонового задания. Задача, конечно, решается при помощи обработок ожидания или обработок постоянно запущенных на клиенте, которые проверяют константу / регистр, но у пользователей при этом "слетает" выбор из меню или обработку фоновую случайно закрывают…

Исходя из этих неудобств, реализовал на основе стандартных сокетов сервер, к которому подключается 1С при помощи внешней компоненты.

Реализация очень проста (см. демо конфигурацию в архиве): на сервере постоянно запущено приложение сервера, которое ретранслирует сообщение всем клиентам, которые подключены к серверу. Дополнительно на сервере добавлены 2-е внутренние команды: #SEND TO — отправка сообщения определенному пользователю, #GET USERS — получение списка подключенных пользователей. Взаимодействие с компонентой происходит через внешнее событие. Также добавлена авторизация (для исключения ложных рассылок). Сервер реализован по спецификации C++11 (контроль буфера приема данных), что теоретически должно ограничить атаки по переполнению, но все же лучше держать его в закрытой сети. По возражению, что можно реализовать через COM объект сокета, сразу отвечу, что не нашел способа обработки одновременно нескольких пользователей, т.к. нет возможности создавать отдельные потоки (thread) для каждого. Возможно, разработка кому-то пригодится.

Тестирование клиента производилось на платформе 8.3.8 (x32, x64). Сервер скомпилирован для работы как x86 (тестировался на Windows Server 2008, Windows 10, Windows 7). 

5 Comments

  1. Maxis

    Это аналог Системы взаимодействия из версии платформы 8.3.11? Подробнее — в Заметках из Зазеркалья.

    Reply
  2. eugenevk

    (1) Да, но очень-очень упрощенный. Идея как раз и возникла из оповещений новой платформы, но возможности перейти на нее пока нет…

    Reply
  3. azubar

    Мне в 1С не хватает компоненты которая позволяла бы на клиенте устанавливать WebSocket соединение и слушать его, а при получении сообщений генерировать внешнее событие. Не встречали такую?

    Reply
  4. eugenevk

    (3) Посмотрите https://infostart.ru/public/808432/, похоже это то, что надо.

    Reply
  5. azubar

    (4) Да это оно, поиском искал но не нашел, благодарю!

    Reply

Leave a Comment

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