HttpClient內部三個超時時間的區別

RequestConfig requestConfig = RequestConfig.custom()
                    .setConnectionRequestTimeout(config.connReqTimeout)   //從鏈接池中獲取鏈接的超時時間
                            //與服務器鏈接超時時間:httpclient會建立一個異步線程用以建立socket鏈接,此處設置該socket的鏈接超時時間
                    .setConnectTimeout(config.connTimeout)
                    .setSocketTimeout(config.socketTimeout)               //socket讀數據超時時間:從服務器獲取響應數據的超時時間
                    .build();
            httpClient = HttpClientBuilder.create()
                    .setMaxConnTotal(config.maxConnTotal)                   //鏈接池中最大鏈接數
                            /**
                             * 分配給同一個route(路由)最大的併發鏈接數。
                             * route:運行環境機器 到 目標機器的一條線路。
                             * 舉例來講,咱們使用HttpClient的實現來分別請求 www.baidu.com 的資源和 www.bing.com 的資源那麼他就會產生兩個route。
                             */
                    .setMaxConnPerRoute(config.maxConnPerRoute)
                    .setDefaultRequestConfig(requestConfig)
                    .build();
  1. ConnectionRequestTimeout從鏈接池中獲取可用鏈接超時 HttpClient中的要用鏈接時嘗試從鏈接池中獲取,如果在等待了必定的時間後尚未獲取到可用鏈接(好比鏈接池中沒有空閒鏈接了)則會拋出獲取鏈接超時異常。java

  2. 鏈接目標超時connectionTimeout 指的是鏈接目標url的鏈接超時時間,即客服端發送請求到與目標url創建起鏈接的最大時間。若是在該時間範圍內尚未創建起鏈接,則就拋出connectionTimeOut異常。 如測試的時候,將url改成一個不存在的url:「http://test.com」 , 超時時間3000ms事後,系統報出異常: org.apache.commons.httpclient.ConnectTimeoutException:The host did not accept the connection within timeout of 3000 msapache

  3. 等待響應超時(讀取數據超時)socketTimeout 鏈接上一個url後,獲取response的返回等待時間 ,即在與目標url創建鏈接後,等待返回response的最大時間,在規定時間內沒有返回響應的話就拋出SocketTimeout。 測試的時候的鏈接url爲我本地開啓的一個url,http://localhost:8080/firstTest.htm?method=test 在我這個測試url裏,當訪問到這個連接時,線程sleep一段時間,來模擬返回response超時服務器

相關文章
相關標籤/搜索