加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

一次简单的 HTTP 调用,为什么时延这么大?抓个包分析下

发布时间:2019-07-16 20:35:51 所属栏目:教程 来源:Java高级技术架构
导读:1.最近项目测试遇到个奇怪的现象,在测试环境通过 Apache HttpClient 调用后端的 HTTP 服务,平均耗时居然接近 39.2ms。可能你乍一看觉得这不是很正常吗,有什么好奇怪的?其实不然,我再来说下一些基本信息,该后端的 HTTP 服务并没有什么业务逻辑,只是将

在后端 HTTP 服务,加上启动"-Dsun.net.httpserver.nodelay=true"参数,再试试。效果很明显,平均耗时从39.2ms 降到 2.8ms。

一次简单的 HTTP 调用,为什么时延这么大?抓个包分析下

问题是解决了,但是到这里如果你就此止步,那就太便宜了这个案例了,简直暴殄天物。因为还有一堆疑惑等着你呢?

为什么加了 TCP_NODELAY ,时延就从 39.2ms 降低到 2.8ms?

为什么本地测试的平均时延是 55ms,而不是 ping 的时延 26ms?

TCP 协议究竟是怎么发送数据包的?

来,我们接着乘热打铁。

5. 解惑

5.1 TCP_NODELAY 何许人也?

在 Socket 编程中,TCP_NODELAY 选项是用来控制是否开启 Nagle 算法。在 Java 中,为 ture 表示关闭 Nagle 算法,为 false 表示打开 Nagle 算法。你一定会问 Nagle 算法是什么?

5.2 Nagle 算法是什么鬼?

Nagle 算法是一种通过减少通过网络发送的数据包数量来提高 TCP/IP 网络效率的方法。它使用发明人 John Nagle 的名字来命名的,John Nagle 在 1984 年首次用这个算法来尝试解决福特汽车公司的网络拥塞问题。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读