HTTP 1.1流水线

我必须用Java实现HTTP客户端,并且出于我的需要,似乎最有效的方法是实现HTTP管道(按照RFC2616)。

顺便说一句,我想管道POST。(我也不在谈论多路复用。我在谈论流水线,即在接收到任何HTTP请求的响应之前,通过一个连接发送许多请求)

我找不到明确声明其支持流水线的第三方库。但是我可以使用例如Apache

HTTPCore来构建这样的客户端,或者如果需要的话,可以自己构建。

我的问题是,这是否是个好主意。我没有找到任何权威性的参考,认为HTTP流水线不仅是理论模型,而且可以由HTTP服务器正确实现。此外,默认情况下,所有支持流水线的浏览器均禁用此功能。

因此,我应该尝试实现这样的客户端,否则由于服务器的实现(或代理)会遇到很多麻烦。有没有参考资料可以提供有关这些准则的指南?

如果不是一个好主意,那么效率的替代编程模型将是什么?单独的TCP连接?

回答:

我已经实现了管道HTTP客户端。基本概念听起来很简单,但是错误处理非常困难。性能提升微不足道,以至于我们很久以前就放弃了这些概念。

我认为,这对于正常的用例来说是没有意义的。仅当请求具有逻辑连接时,它才有一些好处。例如,您有一个3请求事务,您可以将它们全部批量发送。但是通常,如果可以管道化它们,则可以将它们组合为一个请求。

以下只是我记得的一些障碍,

  1. TCP的keepalive不能保证持久连接。如果在连接中传送了3个请求,则服务器在第一个响应后将断开连接。您应该重试接下来的两个请求。

  2. 当您有多个连接时,负载平衡也很棘手。如果没有空闲连接,则可以使用繁忙的连接,也可以创建一个新的连接。

  3. 超时也很棘手。当一个请求超时时,您必须丢弃所有请求,因为它们必须按顺序返回。

以上是 HTTP 1.1流水线 的全部内容, 来源链接: utcz.com/qa/426217.html

回到顶部