Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

как отслеживать мёртвые коннекты?   Найти похожие ветки 

 
Dedushka_Mazai   (2004-01-30 13:59) [0]

есть сервер приложений и клиенты. если клиент по какой-либо причине некорректно завершается (например, нажатием <Reset>), на сервере остаётся мёртвый коннект. как можно эти коннекты вычислять и убивать со стороны сервера?


 
Michail Dalakov ©   (2004-01-30 15:46) [1]

Delphi не позволяет чисто убивать мёртвый коннект со стороны сервера. Частично остается мусор после RDM.free.


 
Michail Dalakov ©   (2004-01-30 15:56) [2]

TComClassManager модуль ComObj


 
Dedushka_Mazai ©   (2004-01-30 16:48) [3]

>Delphi не позволяет чисто убивать мёртвый коннект со стороны сервера. Частично остается мусор после RDM.free.
в смысле? если можно, поподробнее, что там за мусор остаётся?

Вопрос, кстати, был в другом: как, собственно, отследить момент, когда коннект помирает и сделать RDM.Free?


 
Michail Dalakov ©   (2004-01-30 17:41) [4]

Вариант, например, такой.
Клиент конектится. Если модель сервера ciMultiInstance, tmApartment (или ciInternal, tmApartment) то при конекте - в отдельном потоке создается RDM который обслуживент данное соединение. На сервере работает таймер который должен уничтожить соединение если клиент бесследно исчез. Клиент же с какой-то периодичностью должен посылает на сервер сообщение что он еще жив (ну может также посылать и параметр, который будет сообщать серверу сколько он хочет жить).
Мусор остается из за того что после Free TComClassManager никак не узнает об этом, остается поток в котором RDM создавался


 
Dedushka_Mazai ©   (2004-01-30 17:54) [5]

>На сервере работает таймер который должен уничтожить соединение
>если клиент бесследно исчез. Клиент же с какой-то
>периодичностью должен посылает на сервер сообщение что он еще жив
что-то такое я и предполагал

а есть какое-либо оптимальное значение таймаута, по которому клиента можно отстреливать? (оно понятно, что всё это будет тестироваться на практике, но тем не менее, интересно узнать мнение человека, который уже с этим сталкивался).

>Мусор остается из за того что после Free TComClassManager никак
>не узнает об этом, остается поток в котором RDM создавался
но сама дельфа-то корректно освобождает память и убивает потоки?
стало быть должна быть альтернатива RDM.Free.
(чует моё сердце, придётся в исходниках поковыряться)


 
Michail Dalakov ©   (2004-01-30 18:28) [6]

Microsoft в .NET по Default = 10 минут
я устанавливал и поменьше, сервер ждал в 2 раза больше чем просил клиент после чего если клиент не отзывался, то происходило отключение. Рекомендую оставить 10 минут иначе трудно будет работать в Design и Debag из-за отключения сервером

>но сама дельфа-то корректно освобождает память и убивает потоки?
>стало быть должна быть альтернатива RDM.Free.

Да, но она делает это через TComClassManager, и если мне не изменяет память то через приватные методы.


 
Dedushka_Mazai ©   (2004-01-30 18:39) [7]

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


 
Michail Dalakov ©   (2004-01-30 18:53) [8]

Не совсем понял, что за буфер? Где он находится, и как используется.
Каждый клиент обслуживается своей инстанцией COM-объекта, созданной в отдельном потоке, и никакого влияния на другие клиенты не оказывает.
Вообще акт отключения клиента сервером связан с освобождением ресурсов последнего и не больше


 
Dedushka_Mazai ©   (2004-01-30 19:11) [9]

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


 
Michail Dalakov ©   (2004-01-30 19:40) [10]

Не оперативной будет только информация о умерших клиентах,
если требуется оперативность, то можно заставить клиент по требованию сервера подтвердить состояние что он жив.



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
1-79896
valerchik
2004-02-10 09:41
2004.02.25
Form


8-80043
JS
2003-10-25 16:51
2004.02.25
Алгоритм уменьшения глубины цвета


3-79587
Sava
2004-02-02 16:03
2004.02.25
Проблема со нятием флага not null на поле


14-80293
Gorlum
2004-02-03 11:30
2004.02.25
Про графику


14-80225
Gorlum
2004-02-03 17:39
2004.02.25
3D модели