httpclient4.2.1最新版连接池配置

[java]  view plain  copy
  1. /** 
  2.  * 适合多线程的HttpClient,用httpClient4.2.1实现 
  3.  * @return DefaultHttpClient 
  4.  */  
  5. public static DefaultHttpClient getHttpClient()  
  6. {         
  7.     // 设置组件参数, HTTP协议的版本,1.1/1.0/0.9   
  8.     HttpParams params = new BasicHttpParams();   
  9.     HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);   
  10.     HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1");   
  11.     HttpProtocolParams.setUseExpectContinue(params, true);      
  12.   
  13.     //设置连接超时时间   
  14.     int REQUEST_TIMEOUT = 10*1000;  //设置请求超时10秒钟   
  15.     int SO_TIMEOUT = 10*1000;       //设置等待数据超时时间10秒钟   
  16.     //HttpConnectionParams.setConnectionTimeout(params, REQUEST_TIMEOUT);  
  17.     //HttpConnectionParams.setSoTimeout(params, SO_TIMEOUT);  
  18.     params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, REQUEST_TIMEOUT);    
  19.     params.setParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT);   
  20.     
  21.     //设置访问协议   
  22.     SchemeRegistry schreg = new SchemeRegistry();    
  23.     schreg.register(new Scheme("http",80,PlainSocketFactory.getSocketFactory()));   
  24.     schreg.register(new Scheme("https"443, SSLSocketFactory.getSocketFactory()));         
  25.       
  26.     //多连接的线程安全的管理器   
  27.     PoolingClientConnectionManager pccm = new PoolingClientConnectionManager(schreg);  
  28.     pccm.setDefaultMaxPerRoute(20); //每个主机的最大并行链接数   
  29.     pccm.setMaxTotal(100);          //客户端总并行链接最大数      
  30.       
  31.     DefaultHttpClient httpClient = new DefaultHttpClient(pccm, params);    
  32.     return httpClient;  
  33. }  

如果以上代码有问题可能是现在安卓包里缺少PoolingClientConnectionManager这个类,倒入httpclient4.2.1解决问题。

 

另一种直接使用安卓内置的httpclient包的用法(ClientConnectionManager线程安全的连接管理类):

[java]  view plain  copy
  1. /** 
  2.      *  
  3.      * @return DefaultHttpClient 
  4.      */  
  5.     public static synchronized DefaultHttpClient getHttpClient()  
  6.     {         
  7.         if(httpClient == null)  
  8.         {                     
  9.             Log.v(TAG, "->> httpClient is null ->> do getHttpClient");  
  10.             // 设置组件参数, HTTP协议的版本,1.1/1.0/0.9   
  11.             HttpParams params = new BasicHttpParams();   
  12.             HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);   
  13.             HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1");   
  14.             HttpProtocolParams.setUseExpectContinue(params, true);      
  15.       
  16.             //设置连接超时时间   
  17.             int REQUEST_TIMEOUT = 10 * 1000;    //设置请求超时10秒钟   
  18.             int SO_TIMEOUT = 10 * 1000;         //设置等待数据超时时间10秒钟   
  19.             HttpConnectionParams.setConnectionTimeout(params, REQUEST_TIMEOUT);  
  20.             HttpConnectionParams.setSoTimeout(params, SO_TIMEOUT);  
  21.             ConnManagerParams.setTimeout(params, 1000); //从连接池中取连接的超时时间  
  22.                 
  23.             //设置访问协议   
  24.             SchemeRegistry schreg = new SchemeRegistry();    
  25.             schreg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));   
  26.             schreg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));       
  27.                           
  28.             // 使用线程安全的连接管理来创建HttpClient    
  29.             ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schreg);    
  30.             httpClient = new DefaultHttpClient(conMgr, params);   
  31.         }  
  32.         return httpClient;  
  33.     }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置HttpClient连接池,你需要使用Apache HttpClient库。下面是一个简单的示例,展示了如何配置连接池: ```java import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; public class HttpClientPoolExample { public static void main(String[] args) { // 创建连接池配置 RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(5000) // 连接超时时间 .setSocketTimeout(5000) // 数据传输超时时间 .build(); // 创建连接池 PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); connManager.setMaxTotal(100); // 设置连接池最大连接数 // 创建HttpClient实例 CloseableHttpClient httpClient = HttpClientBuilder.create() .setDefaultRequestConfig(requestConfig) // 设置默认的请求配置 .setConnectionManager(connManager) // 设置连接池 .build(); // 使用HttpClient发送请求 HttpHost targetHost = new HttpHost("www.example.com", 80, "http"); HttpGet request = new HttpGet("/"); try (CloseableHttpResponse response = httpClient.execute(targetHost, request)) { // 处理响应 // ... } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们创建了一个连接池配置(RequestConfig),其中设置了连接超时时间和数据传输超时时间。然后,我们创建了一个连接池(PoolingHttpClientConnectionManager),并设置了最大连接数。最后,我们使用HttpClientBuilder来构建HttpClient实例,并将连接池和请求配置设置到其中。 这只是一个简单的示例,你可以根据自己的需求进行更详细的配置,例如设置路由最大连接数、设置代理等。另外,记得在使用完HttpClient后关闭它,以释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值