В процессе эксплуатации систем на базе 1С:Предприятие 8.3 администраторы часто сталкиваются с ситуацией нехватки клиентских лицензий. Одной из идей решения этой проблемы является изменение частоты опроса сервера («heartbeat») тонким клиентом, чтобы сеансы быстрее или, наоборот, реже подтверждали свою активность. Рассмотрим подробно, как работает этот механизм, можно ли его настроить и какие существуют альтернативные способы освобождения лицензий при бездействии пользователей.
Для начала разберем техническую сторону вопроса. По умолчанию тонкий клиент 1С каждые 5–10 минут отправляет на сервер пакеты данных для подтверждения того, что сеанс все еще активен. Этот интервал жестко зашит в программный код платформы 1С. К сожалению, не существует штатного параметра запуска (вроде ключа командной строки), который мог бы изменить этот конкретный период опроса.
Проанализируем, почему это так. Платформа должна гарантировать, что сеанс не будет разорван из-за кратковременных сетевых сбоев, но при этом сервер должен своевременно узнавать о «падении» клиента. Жестко заданный интервал позволяет системе балансировать между нагрузкой на сеть и актуальностью списка активных пользователей.
Выясним, как происходит освобождение лицензий, так как именно это является конечной целью. В 1С существует понятие «спящего сеанса». Посмотрим на важные условия, при которых лицензия возвращается в пул доступных:
1cv8c.exe.Рассмотрим настройки в консоли администрирования кластера серверов 1С, которые помогут нам управлять этим процессом. Для каждой информационной базы можно задать:
Если мы установим время засыпания, например, 1200 секунд (20 минут), то через этот интервал лицензия освободится, даже если само окно программы у пользователя открыто. При возобновлении работы клиент попытается снова получить лицензию. Если свободные лицензии есть — работа продолжится незаметно. Если нет — пользователь увидит сообщение об отсутствии лицензии.
Разберем ситуацию, когда стандартных настроек кластера недостаточно или они работают нестабильно. Мы можем реализовать собственный механизм контроля активности непосредственно в коде конфигурации. Для этого воспользуемся методом ПодключитьОбработчикОжидания.
Проанализируем алгоритм: мы будем отслеживать время последнего действия пользователя и, если оно превышает заданный порог, принудительно завершать работу системы. Это гарантированно освобождает лицензию любого типа.
В модуле управляемого приложения можно разместить следующий код:
Перем ВремяПоследнейАктивности;
Процедура ПриНачалеРаботыСистемы()
ВремяПоследнейАктивности = ТекущаяДата();
ПодключитьОбработчикОжидания("ПроверитьАктивностьПользователя", 60); // Проверка каждую минуту
КонецПроцедуры
Процедура ПроверитьАктивностьПользователя() Экспорт
// Если прошло более 30 минут (1800 секунд)
Если ТекущаяДата() - ВремяПоследнейАктивности > 1800 Тогда
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры
Чтобы этот механизм работал корректно, нам нужно обновлять переменную ВремяПоследнейАктивности при любых действиях. В управляемых формах это можно сделать, перехватив события в формах или используя глобальные обработчики, однако наиболее надежный и простой способ для всей системы — проверять изменение данных или вызов серверных методов.
Проанализируем еще один эффективный путь — переход части пользователей на работу через веб-клиент. Выясним преимущества этого подхода в контексте лицензирования:
Idle Timeout (тайм-аут простоя). По истечении этого времени веб-сервер закрывает соединение, что инициирует немедленное засыпание сеанса на стороне 1С.Рассмотрим важный нюанс при публикации информационной базы. Если мы используем доступ через http или https даже для тонкого клиента, поведение системы меняется. В файле default.vrd можно косвенно влиять на сеансы. Однако ключевым остается флаг в настройках базы на сервере: «Разрешить выдачу лицензий сервером 1С:Предприятия».
Важно помнить: Если этот флаг включен, сервер считает лицензии «по сеансам». Если один и тот же человек откроет три окна одной базы, он займет три лицензии. Если флаг выключен (лицензии раздает сам клиент или веб-сервер), то одна лицензия может расходоваться на один компьютер/сессию, позволяя открывать несколько баз. В условиях дефицита программных лицензий правильная настройка этого флага может сэкономить до 20-30% пула лицензий без программных доработок.
Подведем итог нашему анализу. Поскольку прямого способа изменить 5-минутный интервал «пинга» в тонком клиенте нет, мы рекомендуем комбинированный подход:
nnhasp.ini.Используя эти методы, можно значительно повысить эффективность использования имеющегося парка лицензий без необходимости внесения изменений в закрытые механизмы платформы.