Подтвердить что ты не робот

Время ожидания подключения и подключения

Я использую Http Apache Components для выполнения http-взаимодействий. Мне нужно настроить мой клиент http. Для этого у меня есть два параметра: время ожидания соединения и время ожидания запроса на соединение. В документации библиотеки и в исходном коде (комментариев не было найдено) я не нашел определения этих терминов. Мне нужно знать, что они точно означают. Может быть, они были определены в протоколе протокола HTTP, но я не могу его найти. Итак, мой вопрос заключается в том, что означают эти два термина и как они отличаются друг от друга.

4b9b3361

Ответ 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 для этого кода отстой. Попробуйте вручную выяснить, как использовать конструктор конфигурации. Святое дерьмо.