Я использую Http Apache Components для выполнения http-взаимодействий. Мне нужно настроить мой клиент http. Для этого у меня есть два параметра: время ожидания соединения и время ожидания запроса на соединение. В документации библиотеки и в исходном коде (комментариев не было найдено) я не нашел определения этих терминов. Мне нужно знать, что они точно означают. Может быть, они были определены в протоколе протокола HTTP, но я не могу его найти. Итак, мой вопрос заключается в том, что означают эти два термина и как они отличаются друг от друга.
Время ожидания подключения и подключения
Ответ 1
HttpClient
имеет способ установить время ожидания соединения и сокета (setConnectionTimeout()
и setTimeout()
) в соответствии с Javadocs HttpClient.
Connection timeout
- это тайм-аут до установления соединения с сервером.
Socket timeout
сокета - это тайм-аут для получения данных (тайм-аут сокета).
Пример:
Допустим, вы указываете свой браузер для доступа к веб-странице. Если сервер не ответит в течение X секунд, произойдет тайм-аут соединения. Но если он установит соединение, то сервер начнет обрабатывать результат для браузера. Если он не завершит эту обработку в течение Y секунд, произойдет таймаут сокета.
Ответ 2
Итак, мой вопрос заключается в том, что означают [время ожидания соединения и время ожидания запроса соединения] и как они отличаются друг от друга.
Время ожидания подключения - это время ожидания в миллисекундах до тех пор, пока сервер не примет запрос. Если вы укажете 3000, http-клиент будет ждать 3 секунды, пока сервер примет TCP-соединение, прежде чем истечет время ожидания. Обычно это используется, чтобы убедиться, что у вас нет проблем с сетью или что вы связываетесь с правильным именем хоста или адресом. Это эквивалентно опции curl --connect-timeout seconds
.
Тайм-аут запроса соединения - это тайм-аут ввода/вывода после установления соединения. Если вы укажете это значение как 10000, то после того, как http-клиент подключится к серверу и отправит запрос, он будет ждать 10 секунд, пока сервер вернет результат. Обычно это используется для того, чтобы ваша работа не ждала медленного сервера навсегда. Это эквивалентно --max-time seconds
curl --max-time seconds
.
В HttpClient 4.XX ниже описано, как создать клиент, который использует конкретные connectTimeoutMillis
и requestTimeoutMillis
.
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
RequestConfig.Builder requestBuilder = RequestConfig.custom();
requestBuilder = requestBuilder.setConnectTimeout(connectTimeoutMillis);
requestBuilder = requestBuilder.setConnectionRequestTimeout(requestTimeoutMillis);
clientBuilder.setDefaultRequestConfig(requestBuilder.build());
CloseableHttpClient httpClient = clientBuilder.build();
...
Кстати, Javadocs для этого кода отстой. Попробуйте вручную выяснить, как использовать конструктор конфигурации. Святое дерьмо.