专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
芋道源码  ·  谈一谈 分库分表 vs NewSQL数据库 ·  15 小时前  
芋道源码  ·  一款轻便、安全、免费的远程桌面工具 ·  15 小时前  
Java编程精选  ·  成年人欲望程度排行榜TOP 10 ·  2 天前  
芋道源码  ·  如何搭建漂亮的 SpringBoot 脚手架? ·  2 天前  
51好读  ›  专栏  ›  ImportNew

为什么你得学些 TCP 的知识?

ImportNew  · 公众号  · Java  · 2016-12-16 21:04

正文

请到「今天看啥」查看全文


突然我记起我一周以前看过的一篇叫做“性能研究(In search of performance)”的文章——我们如何为每个 POST 请求节省 200ms。在这篇文章中,他们说到为什么每个 POST 请求会花费额外的 200 毫秒。就是这个原因。这是该文章中的关键段落:


延迟确认(ACK) 与 TCP_NODELAY


Ruby 的 Net::HTTP 会将 POST 请求切分为两个 TCP 包,一个消息头,一个消息体。相反,curl 会将这两者合并为一个包。更糟糕的是,Net::HTTP 在打开 TCP 套接字时不会设置 TCP_NODELAY,这将导致第二个包需要等到第一个包的接收确认通知之后才能发送。这是 Nagle 算法导致的。


转换到连接的另一端,HAProxy 需要决定如何确认这两个包。在 1.4.18 版本中(我们正在用的版本),它是通过 TCP 延迟确认通知来实现的。延迟确认对 Nagle 算法有非常糟糕的影响,会导致请求暂停直到服务器延迟确认超时。


现在我们解释这个段落说的内容。


  • TCP 是一个通过数据包传输数据的算法

  • 他们的 HTTP 库将 POST 请求分割成两个小的数据包发送


接下来,TCP 采用类似如下的步骤进行交互:








请到「今天看啥」查看全文