Как сделать тайм-аут HTTP-соединения / отключен через определенный промежуток времени? - PullRequest
3 голосов
/ 18 декабря 2009

Я новичок в Apache HttpClient, я использовал следующий код для получения тайм-аута HTTP-соединения (отключенного) через определенный промежуток времени:

PostMethod method = new PostMethod(authURL);
HttpClient client = new HttpClient();
HttpClientParams params= new HttpClientParams();
params.setParameter(params.CONNECTION_MANAGER_TIMEOUT, 10); //10 Nano second
client.executeMethod(method);

но ждать более минуты без надежды на таймаут / отключение? Где может быть проблема?

Ответы [ 3 ]

4 голосов
/ 18 декабря 2009

В HTTPClient вовлечено 2 таймаута, попробуйте установить оба,

  client.getHttpConnectionManager().
        getParams().setConnectionTimeout(5000);
  client.getHttpConnectionManager().
        getParams().setSoTimeout(5000);

Однако значения будут игнорироваться, если соединение застряло в вызове собственного сокета. Таким образом, вам может потребоваться выполнить запрос в другом потоке, чтобы вы могли рассчитать время ожидания. Смотрите мой ответ на этот вопрос о том, как это сделать,

Тайм-аут процесса в Java

1 голос
/ 18 декабря 2009

Тайм-аут менеджера соединений срабатывает, когда попытка получить соединение от менеджера соединений занимает слишком много времени. Это не то же самое, что тайм-аут для самого http-соединения. Вместо этого используйте HttpClientParams.setSoTimeout ().

http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/params/HttpMethodParams.html#setSoTimeout%28int%29

0 голосов
/ 18 декабря 2009

Вы смотрели на настройку SO_TIMEOUT ?

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

...