ConnectionTimeout против SocketTimeout
у меня возникли проблемы с библиотекой, которую я использую. Это может быть библиотека, или это может быть я использую его неправильно!
в принципе, когда я это делаю (тайм-аут в миллисекундах)
_ignitedHttp.setConnectionTimeout(1); // v short
_ignitedHttp.setSocketTimeout(60000); // 60 seconds
исключение таймаута не генерируется, и он работает нормально, однако, когда я делаю следующее,
_ignitedHttp.setConnectionTimeout(60000); // 60 seconds
_ignitedHttp.setSocketTimeout(1); // v short
Я получаю исключение гнезда.
Итак, мой вопрос в том, почему я не могу имитировать исключение соединения? Я неправильно понимаю разницу между сокетом и тайм-аут соединения? Библиотека-это здесь (официально еще не выпущен).
2 ответа:
A время ожидания соединения происходит только при запуске TCP-соединения. Обычно это происходит, если удаленный компьютер не отвечает. Это означает, что сервер был выключен, вы использовали неправильное имя IP/DNS, неправильный порт или сетевое подключение к серверу не работает.
A тайм-аут сокета предназначено для того чтобы контролировать непрерывный входящий поток данных. Если поток данных прерывается в течение указанного времени ожидания, соединение считается заглох/сломался. Конечно, это работает только с соединениями, где данные принимаются все время.
установив тайм-аут сокета на 1, это потребует, чтобы каждые миллисекунды получались новые данные (при условии, что Вы читаете блок данных мудрым и блок достаточно большой)!
Если только входящий поток останавливается более чем на миллисекунду, вы запускаете тайм-аут.
A время ожидания соединения - это максимальное время, которое программа готова ждать для установки соединения с другим процессом. На данный момент Вы не получаете и не публикуете данные приложения, а просто устанавливаете само соединение.
A тайм-аут сокета - тайм-аут при ожидании отдельные пакеты. Это распространенное заблуждение, что тайм-аут сокета-это тайм-аут для получения полного ответа. Так что если у вас есть тайм-аут сокета 1 во-вторых, и ответ, состоящий из 3 IP-пакетов, где каждый пакет ответа занимает 0,9 секунды, чтобы прибыть, для общего времени ответа 2,7 секунды, то не будет таймаута.