HTTPClient 超时连接设置

远程访问连接,设置时间,从而减小没必要要的麻烦,可是HttpClient版本不一致,方法不同,因此有了以下设置html

原帖连接:https://www.cnblogs.com/jimmy-muyuan/p/6012736.htmljava

 

场景:最近并发较高,看到响应时间6s的时候,内心咯噔一下,我记得我设置的超时时间是5s啊。apache

原来读取超时时间没生效,只生效了链接超时时间。服务器

ConnectionPoolTimeoutException 获取链接池链接超时网络

ConnectionTimeout:这定义了经过网络与服务器创建链接的超时时间。Httpclient包中经过一个异步线程去建立与服务器的socket链接,这就是该socket链接的超时时间,此处设置为3秒。并发

将url改成一个不存在的url,则会抛出org.apache.commons.httpclient.ConnectTimeoutException异步

SocketTimeout:这定义了Socket读数据的超时时间,即从服务器获取响应数据须要等待的时间,此处设置为5秒。socket

请求的地址sleep5s后返回数据,则抛出:java.net.SocketTimeoutException: Read timed outui

 

这是个3.X的超时设置方法url

HttpClient client = new HttpClient();

client.setConnectionTimeout(30000);

client.setTimeout(30000);

4.X是这样的
HttpClient httpClient=new DefaultHttpClient();
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,2000);//链接时间
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,2000);//数据传输时间

4.3版本超时设置

CloseableHttpClient httpClient = HttpClients.createDefault();

HttpGet httpGet=new HttpGet("http://www.baidu.com");//HTTP Get请求

RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();//设置请求和传输超时时间

httpGet.setConfig(requestConfig);

httpClient.execute(httpGet);//执行请求

 

之后再写httpClient这两个超时时间必定要加上,不加就极可能悲剧的了

相关文章
相关标签/搜索