非串行流水线HTTP可能吗?

时间:2012-07-17 18:36:56

标签: http

RFC 2616 section 8.1.2.2声明:

  

支持持久连接的客户端可以“管道化”其请求(即,在不等待每个响应的情况下发送多个请求)。服务器必须将其响应发送到的请求以接收请求。

串行响应通常弊大于利,因为串行响应实际上require the server to do more processing并否定了流水线技术带来的性能优势。

例如,如果HTTP客户端请求文件1.jpg,2.jpg,3.jpg,4.jpg和5.jpg,那么在1.jpg之前返回3.jpg无关紧要,或者如果4.jpg在3.jpg之前返回。客户只需按照任何顺序即可获得响应。

HTTP客户端如何获得流水线操作的好处,同时又无法支付响应排队的缺点?

3 个答案:

答案 0 :(得分:2)

客户端不能绕过HOL排队,因为它是RFC 2616的一部分。流水线技术的唯一好处(在我看来)是极其具体和狭窄的情况。考虑:

R 1 费用 = Request A处理费用。
R 2 成本 = Request B处理成本。
TCP cost =协商新TCP连接的成本。

因此,在以下特定情况下使用流水线技术是可行的:

  

R 1 成本 R 2 成本 TCP cost

请求比先前的请求更昂贵,并且比协商新的TCP连接更便宜?不经常。我想补充一点,Websockets(到目前为止)是一个更有趣和更合适的解决方案(就并行后端处理而言)。

答案 1 :(得分:1)

它不能(在HTTP / 1.1中)。它可能是HTTP的未来版本。

答案 2 :(得分:1)

HTTP标头中没有默认机制来标识哪个响应与哪个请求匹配。已知响应是针对特定请求的响应,因为它的接收顺序。如果您要求1.jpg,2.jpg,3.jpg,4.jpg和5.jpg并以任何顺序发送回复,您将不知道哪一个是哪个。

(你可以在客户端和服务器头中实现自己的标记,但是你肯定不符合协议,大多数实现都不知道如何处理它。你必须做一些处理来映射,也可能否定这种并行实现的预期好处。)

您从现有HTTP管道机制获得的主要好处是:

  • 可能减少通信延迟。这可能很重要,具体取决于您的连接。
  • 对于需要更长服务器端计算的请求,服务器可以在接收到请求时在后台启动此计算,同时发送先前的响应,以便能够更早地开始发送第二个结果。 (这也是延迟的形式,但在响应准备方面。)

其中一些好处也可以通过更现代的网络浏览器技术获得,其中多个请求可以单独发送,页面的某些部分可以逐步更新(通过AJAX)。