HTTP协议Web前端之路程序员

HTTP长连接?短连接?长轮询?短轮询?

2017-02-27  本文已影响2629人  Asambojur

错觉与突然的察觉

大多数人都知道HTTP1.0不支持长连接,知道HTTP1.1支持长连接。
这是业界的一个常识。
然而这样的描述导致了一些不做网络底层开发的开发者都下意识的认为HTTP1.1是一个可以建立长连接的的协议。
小弟之前也是如此认为的。
这边是一个很多人都存在的错觉。

偶然在一篇文章中发现了字眼“HTTP是一种应用层的网络协议”,突然想起,长连接是存在于网络层的一种连接状态,而实现它则需要在传输层进行开发,因为它是基于对真实数据的收发,需要在底层进行管控。那么作为应用层的HTTP协议,如何能实现“长连接呢“?

探索

经过一些查阅,才了解到,HTTP作为应用层协议,其实它的生命周期在服务器返回结果时就已经结束了,而所谓的支持长连接,其实是基于'Keep-Alive'请求头所约定,从而向下进行长连接发起的一种机制。该长连接依然是基于TCP的。
因此:
所谓HTTP1.1及以上支持长连接,并不是HTTP1.1可以建立长连接,而是它支持以请求头的方式进行长连接发起(并且要求客户端与服务端都要具备 ‘Keep-Alive: true’ )。

So?这都是些什么?

那么就再来理一理这几个概念的思路吧

容易混淆的长短连接长短轮询

所谓轮询,即是在一个循环周期内不断发起请求来得到数据的机制。只要有请求的的地方,都可以实现轮询,譬如各种事件驱动模型。它的长短是在于某次请求的返回周期。

由上可以看到,长短轮询的理想实现都应当基于长连接,否则若是循环周期太短,那么服务器的荷载会相当重;当然,即便是在长连接下,访问人数过多,长短轮询都有可能造成服务器的瞬时访问量庞大,这就需要一些相应的优化实践了。

上一篇下一篇

猜你喜欢

热点阅读