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;
	}


 

發佈了6 篇原創文章 · 獲贊 16 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章