首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

简单 HTTP 调用,为什么时延这么大?

背景 最近项目测试遇到个奇怪现象,在测试环境通过 Apache HttpClient 调用后端 HTTP 服务,平均耗时居然接近 39.2ms。可能你乍一看觉得这不是很正常吗,有什么好奇怪?...因此在本地使用 Apache HttpClient 写了个简单 Test 程序,直接调用后端 HTTP 服务,发现平均耗时在 55ms 左右。咦,怎么跟测试环境 39.2ms 结果有点区别。...期间怀疑过 Apache HttpClient 是不是有什么地方使用不对,因此使用 JDK 自带 HttpURLConnection 写了简单程序,做了测试,结果一样。 4....对,你猜没错,就是 TCP_NODELAY。 那调用方和被调用方哪边程序没有设置呢? 调用方使用Apache HttpClient ,tcpNoDelay 默认设置就是 true。...在 Linux 系统中,默认这个延迟时间是 40ms; 如果在等待发送 ACK 期间,对方第二个数据又到达了,这时要立即发送 ACK。

1.7K50

简单 HTTP 调用,为什么时延这么大?

背景 最近项目测试遇到个奇怪现象,在测试环境通过 Apache HttpClient 调用后端 HTTP 服务,平均耗时居然接近 39.2ms。可能你乍一看觉得这不是很正常吗,有什么好奇怪?...因此在本地使用 Apache HttpClient 写了个简单 Test 程序,直接调用后端 HTTP 服务,发现平均耗时在 55ms 左右。咦,怎么跟测试环境 39.2ms 结果有点区别。...期间怀疑过 Apache HttpClient 是不是有什么地方使用不对,因此使用 JDK 自带 HttpURLConnection 写了简单程序,做了测试,结果一样。 4....对,你猜没错,就是 TCP_NODELAY。 那调用方和被调用方哪边程序没有设置呢? 调用方使用Apache HttpClient ,tcpNoDelay 默认设置就是 true。...在 Linux 系统中,默认这个延迟时间是 40ms; 如果在等待发送 ACK 期间,对方第二个数据又到达了,这时要立即发送 ACK。

1.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

由一次线上故障来理解下TCP三握、四挥 & Java堆栈分析到源码探秘

这些服务调用都是通过 HttpClient 工具直接调用,对 Spring RestTemplate 做了一次封装,其底层也是调用 Apache HttpClient 工具类来实现服务调用。...【这是 TCP 第一次握手,小东状态此时处于 syn_sent 状态】 2)小升收到了小东聊天网络,你得确认下吧,表示你收到了。...然后,激动做了个回复「 针对小东发来 sync ,做了个 ack 回复确认」。因隔了一段时间了,小升也不确定小东还在不在线了。...【小东状态此时处于 fin_wait1 状态,这是 TCP 第一次挥手】 2)小升收到了小东 fin1 ,回复了 ack 确认消息。...【此时,小升状态处于 last_ack 状态,这是 TCP 第三次挥手】 4)小东针对小升发来 fin2 ,最终回复了个 ack 确认

69310

由一次线上故障来理解下TCP三握、四挥; Java堆栈分析到源码探秘

这些服务调用都是通过 HttpClient 工具直接调用,对 Spring RestTemplate 做了一次封装,其底层也是调用 Apache HttpClient 工具类来实现服务调用。...【这是 TCP 第一次握手,小东状态此时处于 syn_sent 状态】 2)小升收到了小东聊天网络,你得确认下吧,表示你收到了。...然后,激动做了个回复「 针对小东发来 sync ,做了个 ack 回复确认」。因隔了一段时间了,小升也不确定小东还在不在线了。...【小东状态此时处于 fin_wait1 状态,这是 TCP 第一次挥手】 2)小升收到了小东 fin1 ,回复了 ack 确认消息。...【此时,小升状态处于 last_ack 状态,这是 TCP 第三次挥手】 4)小东针对小升发来 fin2 ,最终回复了个 ack 确认

1.1K10

HttpClient(一)HttpClient抓取网页基本信息

一、HttpClient简介   HttpClientApache Jakarta Common 下子项目,可以用来提供高效、最新、功能丰富支持 HTTP 协议客户端编程工具,   并且它支持...官方站点:http://hc.apache.org/   最新版本4.5 http://hc.apache.org/httpcomponents-client-4.5.x/   官方文档: http...虽然在 JDK java net中   已经提供了访问 HTTP 协议基本功能,但是对于大部分应用程序来说,JDK 库本身提供功能还不够丰富和灵活。...HttpClientApache Jakarta Common 下子   项目,用来提供高效、最新、功能丰富支持 HTTP 协议客户端编程工具,并且它支持 HTTP 协议最新版本和建议...现在HttpClient最新版本为 HttpClient 4.5 (GA) (2015-09-11)。

1.6K80

HttpClient 在vivo内销浏览器高并发实践优化

IP与端口连接对,确认对方服务器IP地址。...:既然每次都手动关闭了连接,为什么还会有大量CLOSE_WAIT状态连接存在呢?...而通过对接口我们发现,响应头里有Connection:keep-live字样,那我们就可以重点从HttpClient对长连接管理入手来进行代码分析。...接着我们就看到了HttpClient关闭空闲连接具体实现,里面有我们想要看到内容:此时,我们可以得出第一个结论:可以在初始化连接池时候,通过实现带参PoolingHttpClientConnectionManager...【pending】:等待连接容器,其实该容器只是在等待连接释放时候用作阻塞线程,下文也不会再提到,感兴趣可以参考具体实现代码,其与connectionRequestTimout相关。

30420

扫清盲点,如何正确HttpClient 3.x系统升级到HttpClient 4.x

区分HttpClient 3.x 和 HttpClient 4.x jar 如下图所示,如果是HttpClient 3.x 在项目中需要引入 import org.apache.commons.httpclient...另外关于3.x和4.xjar依赖,在上图中可以看出,3.xjar依赖于commons-logging和commons-codec。...HttpClient常量类直接来使用,具体详细常量参照下面的链接: 3.x 版本 https://hc.apache.org/httpclient-3.x/apidocs/constant-values.html...对于HttpClient 4.5.x 之后版本废弃API版本替代策略(针对SSL相关API) HttpClient4.5之后依然有很多变化,其中一些API也废弃掉了。...HttpClient 4.5.x 之后 Deprecated 废弃API 替代对应策略:https://blog.csdn.net/dietime1943/article/details/86705539

1.3K20

Okhttp vs Apache vs Jdk

除了本文推荐几种方式,强烈推荐 OkHttp 目前JAVA实现HTTP请求方法用最多有两种:一种是通过HTTPClient这种第三方开源框架去实现。...HTTPClient对HTTP封装性比较不错,通过它基本上能够满足我们大部分需求。...HttpClient3.1 是 org.apache.commons.httpclient下操作远程 url工具,虽然已不再更新,但实现工作中使用httpClient3.1代码还是很多,HttpClient4.5...是org.apache.http.client下操作远程 url工具,最新; 另一种则是通过HttpURLConnection去实现,HttpURLConnection是JAVA标准类,是JAVA...json或者其他格式,此时我们则需要更改请求头及参数设置信息,以httpClient4.5为例,更改下面两列配置: httpPost.setEntity(new StringEntity("你json

1.7K20

Java爬虫系列二:使用HttpClient抓取页面HTML

围绕下面几个点展开: 什么是HttpClient HttpClient入门实例 复杂应用 结束语 一、什么是HttpClient 度娘说: HttpClientApache Jakarta...Common 下子项目,可以用来提供高效、最新、功能丰富支持 HTTP 协议客户端编程工具,并且它支持 HTTP 协议最新版本和建议。...根据百度给出HomePage是这个:http://hc.apache.org/httpclient-3.x/,但是进入后你会发现有句话 大意是:Commons HttpClient这个项目已经不再维护了...也就是说我们以后要用的话就用新。点这个Apache HttpComponents链接进去能看到它最新版本是4.5,而且有快速上手例子和专业说明文档。...别着急,慢慢往下看 三、复杂应用 第二个网站访问不了,是因为网站有反爬虫处理,怎么绕过他呢?

93810

HttpClient4.X 升级 入门 + http连接池使用

为什么使用HttpClient4?主要是HttpConnection没有连接池概念,多少次请求就会建立多少个IO,在访问量巨大情况下服务器IO可能会耗尽。...HttpClient4在这点上做了改进,使用我们常用InputStream.close()来确认连接关闭(4.1版本之前使用entity.consumeContent()来确认内容已经被消耗关闭连接)...这里为什么要特别提到route最大连接数这个参数呢,因为这个参数默认值为2,如果不设置这个参数值默认情况下对于同一个目标机器最大并发连接只有2个!...这意味着如果你正在执行一个针对某一台目标机器抓取任务时候,哪怕你设置连接池最大连接数为200,但是实际上还是只有2个连接在工作,其他剩余198个连接都在等待,都是为别的目标机器服务。...HttpClient4.X 教程下载: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient-contrib

51230

程序员带你学习安卓开发-安卓基础之网络编程 大汇总

第一个参数:欲编码中文字符串 ?...第二个参数:编码方式 对于get方式进行网络编程大家应该很熟悉了。其实就是直接在url链接中直接增加键值对参数,请求这个页面就可以了。 而往往有时候为了安全考虑,一般需要进行post请求。...使用面向对象HttpClient进行链接网络 HttpClientApache小组维护一个项目,相较于原生http请求来说,Httpclient更易用方便,更高效。...我们进行使用时候首先要下载第三方jar地址:http://hc.apache.org/downloads.cgi 下载完毕后把其中lib文件夹中jar文件,复制到项目中: 选择jar文件---右键...此时就可以使用HttpClient了 ? Get请求 POST请求 ? 这节教程先写到这里吧,虽然篇幅不大,但是知识点很重要,需要大家好好消化。如有什么问题直接在下方讨论区域,评论。 ?

79930

程序员带你学习安卓开发-安卓基础之网络编程 大汇总

第一个参数:欲编码中文字符串 ?...第二个参数:编码方式 对于get方式进行网络编程大家应该很熟悉了。其实就是直接在url链接中直接增加键值对参数,请求这个页面就可以了。 而往往有时候为了安全考虑,一般需要进行post请求。...使用面向对象HttpClient进行链接网络 HttpClientApache小组维护一个项目,相较于原生http请求来说,Httpclient更易用方便,更高效。...我们进行使用时候首先要下载第三方jar地址:http://hc.apache.org/downloads.cgi 下载完毕后把其中lib文件夹中jar文件,复制到项目中: 选择jar文件---右键...此时就可以使用HttpClient了 ? Get请求 POST请求 ? 这节教程先写到这里吧,虽然篇幅不大,但是知识点很重要,需要大家好好消化。如有什么问题直接在下方讨论区域,评论。 ?

76740

java(优化20) httpClient简介

一、HttpClient是什么 HttpClientApache Jakarta Common 下子项目,可以用来提供高效、最新、功能丰富支持 HTTP 协议客户端编程工具,并且它支持...HttpClient 已应用在很多项目中,比如 Apache Jakarta 上很著名另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。...import org.apache.commons.httpclient.*; import org.apache.commons.httpclient.methods.GetMethod; import...在创建了PostMethod实例之后,需要给method实例填充表单值,在BBS登录表单中需要有两个域,第一个是用户名(域名叫id),第二个是密码(域名叫passwd)。...七、代理器 HttpClient中使用代理服务器非常简单,调用HttpClient中setProxy方法就可以,方法第一个参数是代理服务器地址,第二个参数是端口号。

82930

Java中httpClient三种超时设置总结

ApacheHttpClient中,有三个设置超时地方: /* 从连接池中取连接超时时间*/ ConnManagerParams.setTimeout(params, 1000); /连接超时...HttpConnectionParams.setSoTimeout(params, 4000); 第一行设置ConnectionPoolTimeout: 这定义了从ConnectionManager管理连接池中取出连接超时时间...Httpclient中通过一个异步线程去创建与服务器socket连接,这就是该socket连接超时时间,此处设置为2秒。...第三行设置SocketTimeout: 这定义了Socket读数据超时时间,即从服务器获取响应数据需要等待时间,此处设置为4秒。...connectionTimeout:指的是连接一个url连接等待时间。 soTimeout:指的是连接上一个url,获取response返回等待时间。

2.5K20

.Net 跨平台可移植类库正在进行

这个库为Scoreoid Rest APIs提供了一个友好.Net包装器,并且使用了我们可移植 HttpClient NuGet。...FanArt Portable – 一个开发人员可以用于访问fanart.tv 电影,TV和音乐图片资源可移植类库。它也使用了可移植HttpClient。...它也使用了可移植HttpClient。 LiveSDKHelper – 一个帮助类库,让微软Live SDK使用变得更加容易。它包含了那些能够被反序列化Live SDK响应强类型。...Microsoft.Bcl.Async –  准备好了底层平台等待/异步。...最近至少在2种场合下,我都听到过演说者告诉他们听众,你不能通过一个可移植类库去引用一个特定目标的 .NET类库(例如像.Net Framework4.5类库)。

1.7K90
领券