Здравствуйте. Конечно у меня вопрос не совсем по FreePascal и не по Lazarusu. Однако темы близкие. И на этом форуме, очень осведомленные профы обитают! Да и ниже описанную проблему надо решать, в будущем планируется перенести проект на lazarus.
Задача следующего характера.
Разработан программный комплекс (DELPHI 7+Indy10+FastMM), где есть несколько программ.
Программы обмениваются данными между собой по средвам HTTP.
Передача организована с помощью TIdHttp и TIdHttpServer.
Одна из программ представляет собой сервер печати,обслуживает различное печатающее оборудование.
Архитектура программы следующая.
На главной форме лежит TIdHttpServer - слушает запросы.
Есть еще поток, в конструкторе которого создается TIdHttp, и в execute раз в минуту
делает запрос на главный сервер с целю получить конфигурацию оборудования.
Так же для каждого печатающего устройства работает поток, обслуживающий печать на нем.
Обмен данными между потоками происходит с помощью специальных потокобезопасных объектов.
Утечек памяти нет, очевидных ошибок так же нет.
Все работает достаточно стабильно. Но у одного из клиентов раз в месяц на одной из машин
(программа работает на 10 машинах по 20 часов в сутки) происходит следующая ситуация.
При постановке задачи печати зависает соединение клиентской программы и сервера печати.
То, есть клиент делает запрос, а на сервере в INDY логе даже намека нет, что кто-то подключился,
HTTPServerCommandGet не срабатывает.
Клиентская программа зависает (пока таймаут соединения не сработает).
Если в момент зависания закрыть сервер печати, то он корректно закрывается (ни каких Exception'ов).
А в программе клиенте в зависшем запросе возникает исключение "Connection closed gracefully". То есть
соединение было корректно разорвано на сервере.
Дополнительная информация к размышлению.
Зависание происходит, когда программа клиент и сервер печати находятся на одной машине.
(Возможно из-за редкости ошибки она просто не проявила себя в распределенном варианте).
Сервер печати - это Delphi программа сворачиваемая в трей с помощью TCoolTrayIcon.
(Слышал, что тоже как-то на работу многопоточных программ влияет).
В общем нужна помощь... Сам по-видимому не осилю проблему.
Есть мысли, что как то друг другу мешают TIdHttp и TIdHttpServer, так это или не так?