TCP Keep Alive на idHttpServer (сервер) и wininet (клиент)

У меня есть приложение для веб-сервера, разработанное с использованием idHttpServer. Когда клиент подключается, мой веб-сервер по какой-то неизвестной причине отключился (а не изящно отключился), мой веб-сервер не получает уведомления. Я знаю, что это нормальное поведение, но мне нужно знать, когда клиент умирает.

Есть несколько способов сделать это. Я знаю 2 хороших способа:

1 - Реализовать механизм сердцебиения. Клиентский сокет уведомляет сервер о том, что он все еще активен (требуется некоторая работа и некоторый код, чтобы заставить его работать)

2 - TCP Keep Alive . Этот способ мне нравится больше всего, потому что он требует не слишком много кода и работы. Но у меня есть несколько вопросов по этому поводу.

  • Можно ли это использовать с получил отключение (не изящное отключение), мой веб-сервер не получает уведомления. Я знаю, что это нормальное поведение, но мне нужно знать, когда клиент умирает.

    Есть несколько способов сделать это. Я знаю 2 хороших способа:

    1 - Реализовать механизм сердцебиения. Клиентский сокет уведомляет сервер о том, что он все еще активен (требуется некоторая работа и некоторый код, чтобы заставить его работать)

    2 - TCP Keep Alive . Этот способ мне нравится больше всего, потому что он требует не слишком много кода и работы. Но у меня есть несколько вопросов по этому поводу.

    • Можно ли это использовать с получил отключение (не изящное отключение), мой веб-сервер не получает уведомления. Я знаю, что это нормальное поведение, но мне нужно знать, когда клиент умирает.

      Есть несколько способов сделать это. Я знаю 2 хороших способа:

      1 - Реализовать механизм сердцебиения. Клиентский сокет уведомляет сервер о том, что он все еще активен (требуется некоторая работа и некоторый код, чтобы заставить его работать)

      2 - TCP Keep Alive . Этот способ мне нравится больше всего, потому что он требует не слишком много кода и работы. Но у меня есть несколько вопросов по этому поводу.

      • Можно ли это использовать с Клиентский сокет уведомляет сервер о том, что он все еще активен (требуется некоторая работа и некоторый код, чтобы заставить его работать)

        2 - TCP Keep Alive . Этот способ мне нравится больше всего, потому что он требует не слишком много кода и работы. Но у меня есть несколько вопросов по этому поводу.

        • Можно ли это использовать с Клиентский сокет уведомляет сервер о том, что он все еще активен (требуется некоторая работа и некоторый код, чтобы заставить его работать)

          2 - TCP Keep Alive . Этот способ мне нравится больше всего, потому что он требует не слишком много кода и работы. Но у меня есть несколько вопросов по этому поводу.

          • Можно ли это использовать с idHttpServer (для сервера) и Функции wininet (для клиента)?
          • Это действительно работает так, как ожидалось? Я имею в виду, что сервер постоянно получает уведомление, когда клиент умирает?
          • У кого-нибудь есть образец установки этого на wininet? (Полагаю, это должно быть установлено на стороне клиента, верно?)
          • Есть ли лучший способ уведомить сервер о том, что клиент мертв (конечно, используя indy и wininet)

          EDIT

          Я с использованием Delphi 2010 и последнего исходного кода Indy10 из их svn.

5
задан Rafael Colucci 5 May 2011 в 13:24
поделиться