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