У меня есть приложение веб-сервера, разработанное с использованием idHttpServer. Когда клиент подключается к моему веб-серверу и по какой-то неизвестной причине отключился (а не изящно отключился), мой веб-сервер не получает уведомления. Я знаю, что это нормальное поведение, но мне нужно знать, когда клиент умирает.
Есть несколько способов сделать это. Я знаю 2 хороших способа:
1 - Реализуйте механизм сердцебиения. Клиентский сокет уведомляет сервер о том, что он все еще жив (требуется некоторая работа и некоторый код, чтобы он работал)
2 - TCP Keep Alive. Этот способ мне нравится больше всего, потому что он требует не слишком много кода и работы. Но у меня есть несколько вопросов по этому поводу.
- Можно ли использовать это с функциями idHttpServer (для сервера) и wininet (для клиента)?
- Это действительно работает так, как ожидалось? Я имею в виду, что сервер все время не умирает, когда клиент умирает?
- У кого-нибудь есть образец установки этого на wininet? (Я думаю, это должно быть установлено на стороне клиента, верно?)
- Есть ли лучший способ уведомить сервер о том, что клиент мертв (конечно, используя indy и wininet)
ИЗМЕНИТЬ
Я использую Delphi 2010 и последний исходный код Indy10 из их svn.