关于HTTP长连接

今天下午跟同事讨论起项目中客户端和服务端请求的问题,不经意讨论到http的连接问题了,发现大家对http长连接的一些点都不是太了解,于是在网上查了下资料,做个记录。


首先,什么是http长连接?

http长连接即持久连接是http1.1版本的一个特性,即一个http连接建立完成一个请求-回应后,可以不需要立刻关闭,可以重复使用,具体可以度娘下。


这个连接是否一定是请求-回应-请求-回应顺序进行的?

简单说就是一个回应服务器未返回前,客户端能否在这个连接上再发送一个请求?

这个也是讨论过程中比较不确定的,翻看了资料后,有解释是这样的:客户端发送多个请求而不用等待每个响应,但服务器必须按照接收请求的顺序发送响应。按这个说法,问题的答案应该是可以的。实际是怎样的呢?(程序猿就是这样,不亲自证明就是不相信)同事写了个模拟程序,连续发送两个请求,但结果很奇怪,只收到一个回应,这个跟服务端实现有关?有这个可能!

再看一个测试,无无意中发现一个测试浏览器并发速度的网页:http://stevesouders.com/hpws/parallel-downloads.php

我用chrome测试,按网页的说明,测试出chrome应该是4个并发连接的,再把console打开,看到network页,有10个图片的请求是同时发出的(这里就不贴出图片了),那么基本可以肯定http的长连接是可以发送多个请求而不用等待每个响应的。


新的一个问题来了,如果服务端做了负载均衡,那么一个长连接的多个请求不会跑到不同服务器?

原来协议对这个是有保证的,协议规定了proxy server,比如负载均衡服务,像apache、nginx这些proxy server,必须保证一个长连接只能去到一个服务器。有这个保证,那就不用担心了。



你可能感兴趣的:(编程代码)