鏈接超時(connect timed out)和讀取超時(Read timed out)

設置鏈接超時和讀取超時方法:java

RequestConfig config=RequestConfig.custom()
				.setConnectTimeout(10000) // 設置鏈接超時時間 10秒鐘
				.setSocketTimeout(10000) // 設置讀取超時時間10秒鐘
				.build();

  咱們先把鏈接時間設置爲10毫秒,並訪問一個香港地區的url,http://www.zhixuyuan.top數據庫

運行結果:apache

  咱們再把讀取時間設置爲10毫秒,測試服務器

運行結果:併發

 

示例代碼:測試

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class Demo {
	public static void main(String[] args) throws Exception {
		CloseableHttpClient closeableHttpClient=HttpClients.createDefault(); //一、建立實例
		
		/* 訪問我在香港機房的網站首頁 */
		HttpGet httpGet=new HttpGet("http://www.zhixuyuan.top"); //二、建立實例
		
		HttpHost proxy=new HttpHost("114.219.61.82", 8118);
		RequestConfig config=RequestConfig.custom().setProxy(proxy)
				.setConnectTimeout(3000) // 設置鏈接超時時間 3秒鐘
				.setSocketTimeout(10) // 設置讀取超時時間0.01秒鐘
				.build();
		httpGet.setConfig(config);
		
		CloseableHttpResponse closeableHttpResponse=closeableHttpClient.execute(httpGet); //三、執行
		HttpEntity httpEntity=closeableHttpResponse.getEntity(); //四、獲取實體
		
		//System.out.println(httpEntity.toString());
		System.out.println(EntityUtils.toString(httpEntity, "utf-8")); //獲取網頁內容
		
		closeableHttpResponse.close();
		closeableHttpClient.close();
	}
}

  

 

HttpClient鏈接時間網站

所謂鏈接的時候ui

是HttpClient發送請求的地方開始到鏈接上目標url主機地址的時間,url

理論上是距離越短越快,線路越通暢越快,可是因爲路由複雜交錯,每每鏈接上的時間都不固定,運氣很差連不上,spa

HttpClient的默認鏈接時間,默承認能是1分鐘,假如超過1分鐘 過一會繼續嘗試鏈接,這樣會有一個問題 假如遇到一個url總是連不上,會影響其餘線程的線程進去,

因此咱們有必要進行特殊設置,好比設置10秒鐘 假如10秒鐘沒有鏈接上 咱們就報錯,這樣咱們就能夠進行業務上的處理,

好比咱們業務上控制 過會再鏈接試試看。而且這個特殊url寫到log4j日誌裏去。方便管理員查看。

 

HttpClient讀取時間

所謂讀取的時間 是HttpClient已經鏈接到了目標服務器,而後進行內容數據的獲取,通常狀況 讀取數據都是很快速的,

可是假如讀取的數據量大,或者是目標服務器自己的問題(好比讀取數據庫慢,併發量大等...)也會影響讀取時間。

咱們仍是須要來特殊設置下,好比設置10秒鐘 假如10秒鐘還沒讀取完,就報錯,同上,咱們能夠業務上處理。

相關文章
相關標籤/搜索