`

HttpClient内部三个超时时间的区别

 
阅读更多
1.HttpClient内部三个超时时间的区别

HttpClient内部有三个超时时间设置:连接池获取可用连接超时,连接超时,读取数据超时

先看以下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中的要用连接时尝试从连接池中获取,若是在等待了一定的时间后还没有获取到可用连接(比如连接池中没有空闲连接了)则会抛出获取连接超时异常。


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 ms

3.等待响应超时(读取数据超时)socketTimeout
   连接上一个url后,获取response的返回等待时间 ,即在与目标url建立连接后,等待放回response的最大时间,在规定时间内没有返回响应的话就抛出SocketTimeout。
   测试的时候的连接url为我本地开启的一个url,http://localhost:8080/firstTest.htm?method=test,在我这个测试url里,当访问到这个链接时,线程sleep一段时间,来模拟返回response超时。

@RequestMapping(params = "method=test")  

2. public String testMethod(ModelMap model) {      

3. try {      

4.     Thread.sleep(10000);      

5. } catch (InterruptedException e) {      

6.     // TODO Auto-generated catch block      

7.     e.printStackTrace();      

8. }      

9.       System.out.println("call testMethod method.");      

10.       model.addAttribute("name", "test method");      

11. return "test";      

12.   }  


将读取response返回超时时间设的时间比那个sleep时间短之后,运行程序给出异常:java.net.SocketTimeoutException:Read timed out
http://blog.csdn.net/zhongzh86/article/details/46348933
分享到:
评论

相关推荐

    使用httpclient访问servlet

    - 避免长时间持有HttpClient实例,推荐使用`CloseableHttpClient`并在使用完毕后关闭。 - 根据实际需求配置连接超时和读取超时。 总之,使用HttpClient访问Servlet能够简化Java应用之间的通信,特别是在分布式...

    HttpClient的3个jar包httpclient.jar、logging-1.1.3.jar和codec-1.6.jar

    标题中提到的三个关键jar包是HttpClient正常运行所必需的: 1. `httpclient.jar`(在这个例子中是`commons-httpclient-3.0.jar`):这是HttpClient的核心库,包含了执行HTTP请求、处理响应的主要类和接口。例如,`...

    httpClient入门

    此外,压缩包中的四个文件是HttpClient依赖的第三方库: 1. `dom4j-1.6.1.jar`:这是一个Java文档对象模型库,用于处理XML文档。在HttpClient中,可能用于解析或生成HTTP响应中的XML数据。 2. `commons-httpclient-...

    org.apache.commons.httpclient相关资源包

    描述中提到的三个JAR文件分别是: 1. **commons-codec-1.3.jar**:这是一个编码解码库,包含了各种常见的编码和解码算法,如Base64、Hex、URL编码等。在HttpClient中,这个库用于处理URL编码、MD5哈希等任务,是网络...

    最全最新httpclient4.3.3

    3. 源代码:通过阅读源代码,开发者可以理解HttpClient内部的工作机制,以及如何实现自定义功能。 六、最佳实践 1. 使用连接池:HttpClient支持连接池,可提高并发性能并减少资源消耗。 2. 正确处理异常:对可能...

    httpclient安卓版

    1. 创建HttpClient实例:首先,创建一个HttpClient对象,可以设置连接超时、读取超时等参数。 ```java HttpClient httpClient = new DefaultHttpClient(); HttpParams httpParams = httpClient.getParams(); ...

    Httpclient调用WebService所需jar包

    这三个jar包是HttpClient基本操作的基石,但请注意,随着HttpClient的发展,新的版本可能需要额外的依赖。例如,HttpClient 4.x版本引入了httpcore和httpclient依赖,而HttpClient 5.x版本则进一步更新了依赖结构。...

    httpclient 4.0.3 源代码

    本文将深入探讨HttpClient 4.0.3的源代码,揭示其内部工作原理和关键设计思路。 一、核心概念 1. **HttpClient实例**:HttpClient是整个库的核心,它负责发起HTTP请求并接收响应。在源代码中,HttpClient的实现类...

    HttpClient

    4. **RequestExecutor**:执行HTTP请求的接口,HttpClient内部实现了多个实现类,处理不同类型的HTTP方法。 5. **ConnectionManager**:管理HTTP连接的池,提高性能和资源利用率。 6. **HttpClientBuilder**:用于...

    HttpClient 学习精髓

    - **自定义配置**:HttpClient允许用户自定义各种参数,例如超时时间、连接池大小等。 - **扩展性**:通过继承或实现接口的方式,可以轻松扩展HttpClient的功能。 总之,HttpClient是一个非常强大的工具包,为Java...

    httpclient

    三、HttpClient使用示例 创建HttpClient实例通常分为以下几步: ```java CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(new PoolingHttpClientConnectionManager()) .build(); ...

    httpclient-4.2.5

    《HttpClient 4.2.5:Java通信的基石与安全实践》 HttpClient是Apache软件基金会提供的一个开源HTTP客户端库,其版本4.2.5在Java通信领域具有广泛的使用和高度的认可。这个库为开发者提供了丰富的功能,使得通过...

    httpclient.rar

    最后,"2132"标签可能是指这个资源的内部编号或分类,对于理解具体技术点没有直接影响,但可以帮助你追踪和管理资源。如果你能解压并查看"Httpclient"中的源代码或文档,将更有利于理解和学习HTTP客户端的实现细节。

    C#中HttpWebRequest、WebClient、HttpClient的使用详解

    本文将详细解析这三个类的使用方法及其特点。 首先,我们来看HttpWebRequest,它位于System.Net命名空间中。HttpWebRequest是.NET Framework早期版本中的标准类,用于发起HTTP请求。它提供了丰富的功能,允许开发者...

    HttpCilent用到得jar包

    `HttpCilent用到得jar包`这个主题涵盖了三个核心的依赖文件,它们是:`httpclient-4.5.3.jar`、`httpcore-4.4.6.jar`和`commons-logging-1.2.jar`。 1. **httpclient-4.5.3.jar**: 这是Apache HttpClient的主要库...

    AsyncHttpClient

    AsyncHttpClient 是一个专门为 Android 设计的轻量级、高性能的第三方网络请求库。它提供了异步的 HTTP 请求处理,使得开发者能够轻松地进行网络通信,而无需关心线程同步和网络连接的复杂性。这个库是由 Loopj 开发...

    org.apache.http包

    在实际应用中,开发者通常会创建一个`HttpClient`实例,配置各种参数,然后使用`execute()`方法发送请求。例如,创建一个GET请求: ```java HttpClient httpClient = new DefaultHttpClient(); ...

    使用HttpURLConnection

    我们需要分别设置连接超时(connectTimeout)和读取超时(readTimeout),确保在一定时间内未得到响应时,程序可以中断请求,避免僵死。例如: ```java HttpURLConnection connection = (HttpURLConnection) url....

    android 异步 Http框架源码和例子

    3. **HttpClientEngine**:内部实现类,负责与Apache HttpClient交互,处理实际的网络通信。 4. **RequestQueue**和**RequestFuture**:这两个类用于管理请求队列和异步请求的结果。 三、使用方法 1. **初始化**:...

    httpcomponents-client-4.5.10-bin.tar.gz

    三、主要特性 1. 支持HTTP/1.1和HTTP/2协议:HttpComponents Client 4.5.10支持最新的HTTP/2协议,能显著提高网络通信效率,减少延迟。 2. 高度可配置:开发者可以根据应用需求自定义请求头、连接超时、重试策略等,...

Global site tag (gtag.js) - Google Analytics