Предлагаемый алгоритм чуть проще: настраивать читающее рег задание на старт каждые скажем 2 мин. Если в системе уже работает задание с тем же ключом, то второй экземпляр стартован не будет. Т.е. это нормально, если расписание стоит каждые 2 мин, а само задание работает 10 минут. Дублироваться задания не будут.
Далее, в прикладном коде мы открываем соединение с кроликом и слушаем входящие, задавая таймаут. Это будет время “висения” задания. Например - 5 минут. Если за пять минут событий не пришло, таймаут сработает и управление вернется обратно в 1С. В прикладном коде в случае таймаута мы должны мягко выйти из сеанса ФЗ, т.е. завершить дальнейшие попытки коннектов и просто закончить выполнение кода ФЗ.
Платформа увидит, что больше нет заданий с таким ключом и через 2 мин. снова запустит наш “слушатель”.
Получается, что если события из кролика поступают, то наш “слушатель” работает, получает их и обрабатывает. Как только их поток прерывается более чем на 5 минут (цифры подбираем опытным путем исходя из задачи) - задание гасится, и в следующий раз поднимается планировщиком платформы через заданный интервал.
Тем самым обеспечивается более-менее короткий срок жизни фонового задания и мягкое завершение соединений с кроликом.
Я на 100% не знаю, как реализованы внешние компоненты в 1С, но довольно сильно уверен, что они загружаются в адресное пространство конкретного rphost и за освобождение памяти от объектов компоненты отвечает этот же rphost. Если он работает хорошо, то за счет счетчика ссылок он корректно освобождает память и вместе с ней - отключаются соединения от кролика. Если этого не происходит, то причина ровно одна - память не освободилась. Это могло произойти:
- Есть циклические ссылки на объект компоненты
- Поток платформы, который должен был освободить память - упал, не выполнив метод Release, уменьшающий счетчик ссылок
Если завершается (падает или штатно) сам rphost целиком, то по идее, все его ресурсы, включая сетевые сокеты должны закрыться, и соединение для кролика пропадет. Т.е. перезапуск rphost по таймеру, теоретически должен решить проблему висящих коннектов.