httpclient4.2.1最新版连接池配置

	/**
	 * 适合多线程的HttpClient,用httpClient4.2.1实现
	 * @return DefaultHttpClient
	 */
	public static DefaultHttpClient getHttpClient()
	{  		
	    // 设置组件参数, HTTP协议的版本,1.1/1.0/0.9 
		HttpParams params = new BasicHttpParams(); 
	    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
	    HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1"); 
	    HttpProtocolParams.setUseExpectContinue(params, true); 	  

	    //设置连接超时时间 
	    int REQUEST_TIMEOUT = 10*1000;	//设置请求超时10秒钟 
		int SO_TIMEOUT = 10*1000; 		//设置等待数据超时时间10秒钟 
		//HttpConnectionParams.setConnectionTimeout(params, REQUEST_TIMEOUT);
		//HttpConnectionParams.setSoTimeout(params, SO_TIMEOUT);
	    params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, REQUEST_TIMEOUT);  
	    params.setParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT); 
	  
		//设置访问协议 
		SchemeRegistry schreg = new SchemeRegistry();  
		schreg.register(new Scheme("http",80,PlainSocketFactory.getSocketFactory())); 
		schreg.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory())); 	  
		
		//多连接的线程安全的管理器 
		PoolingClientConnectionManager pccm = new PoolingClientConnectionManager(schreg);
		pccm.setDefaultMaxPerRoute(20);	//每个主机的最大并行链接数 
		pccm.setMaxTotal(100);			//客户端总并行链接最大数    
		
		DefaultHttpClient httpClient = new DefaultHttpClient(pccm, params);  
		return httpClient;
	}

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

 

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

/**
	 * 
	 * @return DefaultHttpClient
	 */
	public static synchronized DefaultHttpClient getHttpClient()
	{  		
		if(httpClient == null)
		{					
			Log.v(TAG, "->> httpClient is null ->> do getHttpClient");
		    // 设置组件参数, HTTP协议的版本,1.1/1.0/0.9 
			HttpParams params = new BasicHttpParams(); 
		    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
		    HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1"); 
		    HttpProtocolParams.setUseExpectContinue(params, true); 	  
	
		    //设置连接超时时间 
		    int REQUEST_TIMEOUT = 10 * 1000;	//设置请求超时10秒钟 
			int SO_TIMEOUT = 10 * 1000; 		//设置等待数据超时时间10秒钟 
			HttpConnectionParams.setConnectionTimeout(params, REQUEST_TIMEOUT);
			HttpConnectionParams.setSoTimeout(params, SO_TIMEOUT);
            ConnManagerParams.setTimeout(params, 1000); //从连接池中取连接的超时时间
       		  
			//设置访问协议 
			SchemeRegistry schreg = new SchemeRegistry();  
			schreg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
			schreg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); 	
						
			// 使用线程安全的连接管理来创建HttpClient  
			ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schreg);  
			httpClient = new DefaultHttpClient(conMgr, params); 
		}
		return httpClient;
	}


 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值