HTTP协议中的长连接,读完之后,大部分程序员收藏了...( 七 )

TCP keep alive的表现:

当一个连接“一段时间”没有数据通讯时 , 一方会发出一个心跳包(Keep Alive包) , 如果对方有回包则表明当前连接有效 , 继续监控 。

这个“一段时间”可以设置 。 具体做法google吧 。

HTTP 流水线技术

使用了HTTP长连接(HTTP persistent connection )之后的好处 , 包括可以使用HTTP 流水线技术(HTTP pipelining , 也有翻译为管道化连接) , 它是指 , 在一个TCP连接内 , 多个HTTP请求可以并行 , 下一个HTTP请求在上一个HTTP请求的应答完成之前就发起 。 从wiki上了解到这个技术目前并没有广泛使用 , 使用这个技术必须要求客户端和服务器端都能支持 , 目前有部分浏览器完全支持 , 而服务端的支持仅需要:按HTTP请求顺序正确返回Response(也就是请求&响应采用FIFO模式) , wiki里也特地指出 , 只要服务器能够正确处理使用HTTP pipelinning的客户端请求 , 那么服务器就算是支持了HTTP pipelining 。

由于要求服务端返回响应数据的顺序必须跟客户端请求时的顺序一致 , 这样也就是要求FIFO , 这容易导致Head-of-line blocking:第一个请求的响应发送影响到了后边的请求 , 因为这个原因导致HTTP流水线技术对性能的提升并不明显(wiki提到 , 这个问题会在HTTP2.0中解决) 。 另外 , 使用这个技术的还必须是幂等的HTTP方法 , 因为客户端无法得知当前已经处理到什么地步 , 重试后可能发生不可预测的结果 。 POST方法不是幂等的:同样的报文 , 第一次POST跟第二次POST在服务端的表现可能会不一样 。

推荐阅读