Как иметь дело с сетевыми отбрасываниями и Инди IdTCPServer

Я создал Клиент-серверное приложение с компонентом IdTCPServer. Клиенты соединяют и поддерживают постоянное соединение через срок действия приложения. Если сетевое соединение будет отброшено (который происходит вполне часто, потому что клиенты соединяются с беспроводной связью aircards), то клиент автоматически снова соединится. Это все хорошо работает.

Моя проблема имеет дело с сокетами на сервере, соответствующем потерянному соединению. Они не обнаруживают сетевое отбрасывание и разъединяют себя. После чтения нескольких похожих статей я узнал, что нет никакого пути к серверу, чтобы знать, было ли соединение отброшено. Это должно ожидать некоторого события для обнаружения этого.

Таким образом, мой вопрос, я должен встроить некоторый механизм в свой сервер для периодического "обрабатывания" сокетов с выделенными соединениями? И если так, как? Я думал, что один путь будет, действительно циклически повторяются посредством всех соединений и пытаются отправить им данные. Я нахожу, что это инициирует то необходимое "событие".

8
задан mjn 27 July 2010 в 14:20
поделиться

1 ответ

Для поддержания активности сеанса на стороне сервера можно использовать своего рода контрольный сигнал или сигнал проверки связи, отправляемый от клиента к серверу через равные промежутки времени. Если сигнал прекращается и истекает интервал тайм-аута, сервер может предположить, что клиент потерял соединение.

(Если сервер просто использует соединение сокета для отправки данных обратно клиенту, сервер не может знать, получил ли их клиент. Данные могут быть где-то посередине.)

6
ответ дан 5 December 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: