- 浏览: 633094 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (820)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (10)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
1.HttpClient内部三个超时时间的区别
HttpClient内部有三个超时时间设置:连接池获取可用连接超时,连接超时,读取数据超时
先看以下HttpClient的初始化代码:
三个超时时间详解:
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超时。
将读取response返回超时时间设的时间比那个sleep时间短之后,运行程序给出异常:java.net.SocketTimeoutException:Read timed out
http://blog.csdn.net/zhongzh86/article/details/46348933
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
发表评论
-
stringentity、urlEncodeFormEntity区别
2018-04-10 20:43 751UrlEncodedFormEntity()的形式比较单一,只 ... -
HttpClient Post 二进制/字节流/byte[]
2018-03-11 23:29 1685http://blog.csdn.net/Sidyhe/art ... -
Socket端口状态说明 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT
2017-12-15 19:30 849http://blog.csdn.net/klzyf100/a ... -
java 实现https请求的基本原理与介绍
2017-09-17 23:13 672实现https请求的基本原理与介绍 http://blog.c ... -
wireshark过滤语法总结
2017-08-29 16:14 485wireshark过滤语法总结 http://blog.csd ... -
OkHttp3
2017-08-09 10:22 453http://www.jianshu.com/p/187328 ... -
HttpClient 发送 HTTP、HTTPS 请求的简单封装
2017-05-27 11:27 631http://blog.csdn.net/happylee66 ... -
httpclient长链接与短链接
2017-05-27 10:12 1448http://blog.csdn.net/yaoqinggg/ ... -
正确使用ngrok穿透内网
2017-05-27 09:55 627http://blog.csdn.net/jiangbo_ph ... -
伪造Http请求IP地址
2017-05-25 20:18 2086注意:伪造Http请求IP地址一般为非推荐使用手段 一般使用 ... -
HTTP长连接和短连接以及推送技术原理
2017-03-05 22:39 1147http://blog.csdn.net/freewaywal ... -
HttpClient容易忽视的细节——连接关闭
2017-02-17 15:04 492HttpClient client = new HttpCli ... -
【HTTP】Fiddler(二) - 使用Fiddler做抓包分析
2017-02-17 08:24 593一.对PC(笔记本)参数进行配置 1. 配置fiddler允许 ... -
fiddler2抓包工具使用图文教程
2016-09-29 16:51 452参考:http://blog.163.com/hlz_2599 ... -
chrome安装插件,安装Postman
2016-09-29 08:56 6701、下载postman插件,可以自己到网上下载,也可以点击ht ... -
tcp三次握手建立连接,四次握手关闭连接
2016-09-12 09:05 50在发送http请求之前,客户端和服务器必须建立tcp三次握手连 ... -
RequestConfig类解析
2016-08-27 17:55 2190这个类位于 org.apache.http.client.co ... -
配置TOMCAT及httpClient的keepalive以高效利用长连接
2016-08-27 17:38 5163总所周知http1.1(http1.0不是标准,依服务器而定) ... -
http的安全方法和幂等性
2016-07-26 14:58 728最近在研究http,看到htt ... -
TCP的三次握手(建立连接)和四次挥手(关闭连接)
2016-05-15 13:01 482http://www.cnblogs.com/Jessy/p/ ...
相关推荐
- 避免长时间持有HttpClient实例,推荐使用`CloseableHttpClient`并在使用完毕后关闭。 - 根据实际需求配置连接超时和读取超时。 总之,使用HttpClient访问Servlet能够简化Java应用之间的通信,特别是在分布式...
描述中提到的三个JAR文件分别是: 1. **commons-codec-1.3.jar**:这是一个编码解码库,包含了各种常见的编码和解码算法,如Base64、Hex、URL编码等。在HttpClient中,这个库用于处理URL编码、MD5哈希等任务,是网络...
标题中提到的三个关键jar包是HttpClient正常运行所必需的: 1. `httpclient.jar`(在这个例子中是`commons-httpclient-3.0.jar`):这是HttpClient的核心库,包含了执行HTTP请求、处理响应的主要类和接口。例如,`...
此外,压缩包中的四个文件是HttpClient依赖的第三方库: 1. `dom4j-1.6.1.jar`:这是一个Java文档对象模型库,用于处理XML文档。在HttpClient中,可能用于解析或生成HTTP响应中的XML数据。 2. `commons-httpclient-...
3. 源代码:通过阅读源代码,开发者可以理解HttpClient内部的工作机制,以及如何实现自定义功能。 六、最佳实践 1. 使用连接池:HttpClient支持连接池,可提高并发性能并减少资源消耗。 2. 正确处理异常:对可能...
1. 创建HttpClient实例:首先,创建一个HttpClient对象,可以设置连接超时、读取超时等参数。 ```java HttpClient httpClient = new DefaultHttpClient(); HttpParams httpParams = httpClient.getParams(); ...
这三个jar包是HttpClient基本操作的基石,但请注意,随着HttpClient的发展,新的版本可能需要额外的依赖。例如,HttpClient 4.x版本引入了httpcore和httpclient依赖,而HttpClient 5.x版本则进一步更新了依赖结构。...
本文将深入探讨HttpClient 4.0.3的源代码,揭示其内部工作原理和关键设计思路。 一、核心概念 1. **HttpClient实例**:HttpClient是整个库的核心,它负责发起HTTP请求并接收响应。在源代码中,HttpClient的实现类...
4. **RequestExecutor**:执行HTTP请求的接口,HttpClient内部实现了多个实现类,处理不同类型的HTTP方法。 5. **ConnectionManager**:管理HTTP连接的池,提高性能和资源利用率。 6. **HttpClientBuilder**:用于...
- **自定义配置**:HttpClient允许用户自定义各种参数,例如超时时间、连接池大小等。 - **扩展性**:通过继承或实现接口的方式,可以轻松扩展HttpClient的功能。 总之,HttpClient是一个非常强大的工具包,为Java...
三、HttpClient使用示例 创建HttpClient实例通常分为以下几步: ```java CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(new PoolingHttpClientConnectionManager()) .build(); ...
《HttpClient 4.2.5:Java通信的基石与安全实践》 HttpClient是Apache软件基金会提供的一个开源HTTP客户端库,其版本4.2.5在Java通信领域具有广泛的使用和高度的认可。这个库为开发者提供了丰富的功能,使得通过...
最后,"2132"标签可能是指这个资源的内部编号或分类,对于理解具体技术点没有直接影响,但可以帮助你追踪和管理资源。如果你能解压并查看"Httpclient"中的源代码或文档,将更有利于理解和学习HTTP客户端的实现细节。
本文将详细解析这三个类的使用方法及其特点。 首先,我们来看HttpWebRequest,它位于System.Net命名空间中。HttpWebRequest是.NET Framework早期版本中的标准类,用于发起HTTP请求。它提供了丰富的功能,允许开发者...
`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 是一个专门为 Android 设计的轻量级、高性能的第三方网络请求库。它提供了异步的 HTTP 请求处理,使得开发者能够轻松地进行网络通信,而无需关心线程同步和网络连接的复杂性。这个库是由 Loopj 开发...
在IT行业中,MFC(Microsoft Foundation Class)是一个C++库,用于构建Windows应用程序。它封装了Windows API,提供了面向对象的编程模型。本篇将详细讲解如何使用MFC实现简单的HTTP POST和GET方法,这对于开发需要...
在实际应用中,开发者通常会创建一个`HttpClient`实例,配置各种参数,然后使用`execute()`方法发送请求。例如,创建一个GET请求: ```java HttpClient httpClient = new DefaultHttpClient(); ...
我们需要分别设置连接超时(connectTimeout)和读取超时(readTimeout),确保在一定时间内未得到响应时,程序可以中断请求,避免僵死。例如: ```java HttpURLConnection connection = (HttpURLConnection) url....
3. **HttpClientEngine**:内部实现类,负责与Apache HttpClient交互,处理实际的网络通信。 4. **RequestQueue**和**RequestFuture**:这两个类用于管理请求队列和异步请求的结果。 三、使用方法 1. **初始化**:...