如何在一段时间间隔后使HTTP连接超时/断开连接?

时间:2009-12-17 22:52:45

标签: java http connection httpclient

我是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 个答案:

答案 0 :(得分:4)

HTTPClient涉及2次超时,尝试设置两者,

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

但是,如果连接卡在本机套接字调用中,则将忽略这些值。因此,您可能必须在不同的线程中运行请求,以便您可以将其计时。请参阅我对此问题的答案,如何做到这一点,

java native Process timeout

答案 1 :(得分:1)

当尝试从连接管理器获取连接的行为花费太长时间时,将触发连接管理器超时。这与http连接本身的超时不同。改为使用HttpClientParams.setSoTimeout()。

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

答案 2 :(得分:0)

您是否看过设置SO_TIMEOUT

  

设置套接字超时(SO_TIMEOUT)   以毫秒为单位时使用   执行该方法。超时值   零被解释为无限   超时。