Заметки из Зазеркалья

31.01.2024

Отправка уведомлений с сервера в клиентское приложение

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Планируется в версии 8.3.26

В различных бизнес-сценариях требуется отправлять уведомления с сервера в клиентское приложение: уведомление об окончании формирования отчета, запрошенного клиентом, окончание сложных расчетов на сервере и т.п.

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

Нас часто просили улучшить эту ситуацию. И вот в версии 8.3.26 появится возможность отправки уведомлений клиентам со стороны сервера без использования Системы взаимодействия.

Будет реализован объект МенеджерУведомленийКлиента, который предоставляет возможность отправки уведомлений с сервера в клиентские сеансы. Методы нового объекта (подробное описание методов и их параметров будет доступно в документации):

  • ПодключитьОбработчик(<Ключ>, <Обработчик>). Клиентский метод, подключает обработчик уведомлений клиента. Если параметр Ключ установлен в строковое значение – используя это строковое значение для адресного отключения обработчиков. Если Ключ установлен в Неопределено - обработчик будет вызываться для всех полученных уведомлений.

  • ОтключитьОбработчик(<Ключ>). Клиентский метод, отключает обработчик уведомлений клиента. Если Ключ установлен в Неопределено – отключает все обработчики.

  • ОтправитьУведомление(<Ключ>, <Данные>, <Адресаты>). Серверный метод, отправляет уведомление выбранным клиентским сеансам (если параметр Адресаты заполнен массивом номеров сеансов, полученных из СеансИнформационнойБазы.НомерСеанса) либо всем клиентским сеансам.

В глобальный контекст добавляется свойство УведомленияКлиента (ClientNotifications) типа МенеджерУведомленийКлиента.

У объекта ФоновоеЗадание добавляется свойство НомерРодительскогоСеанса (ParentSessionNumber), которое содержит номер родительского сеанса для фонового задания, из которого этого фоновое задание было запущено. Это позволит из фонового задания отправить уведомление клиенту, который ожидает результат этого фонового задания.

Важная особенность нового механизма – гарантированная доставка информации до клиентского сеанса (именно сеанса, не пользователя!). То есть если на сервере выполнен метод отправки, то независимо от дальнейшей судьбы процессов сервера (прекращение работы компонентов кластера или рабочих процессов), пока клиентский сеанс существует – будет предпринята попытка доставить это уведомление.

С помощью нового механизма можно будет решать задачу передачи уведомлений с сервера в клиентские приложения небольшим объемом прикладного кода и с минимальной нагрузкой на сетевые и аппаратные ресурсы.

Теги: 8.3.26  разработка 

Рассказать друзьям: