Http 长连接、短连接、长轮询、短轮询、webSocket

一、长连接、短连接

在Http 1.0的时候,规定客户端与服务器只会保持短暂的连接,浏览器每次请求数据都要建立一个连接,服务器完成请求后立即断开TCP连接。

在Http 1.1后,支持持续连接,在请求关闭连接前客户端与服务端都保持连接,实质是保持这个通信管道,之后便可以对其进行复用。

HTTP的长连接和短连接,本质上都是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。

长连接的优势是可以持续保持连接一段时间,浏览器请求数据的时候不用再次建立连接,减少了每次建立连接和断开连接的开销,比如页面上的CSS文件、JS文件等,但缺点是服务器TCP连接数量是有限制的,不能无限增加;

短链接是每次有数据请求才会建立连接,不需要服务器保持TCP连接,但是如果高并发的短链接,可能拉爆服务器。

二、长轮询、短轮询

轮询是在一定的时间周期内,不断发起请求来得到数据的机制。

  • 短轮询
    短轮询指的是在循环周期内,客户端不断发起请求,服务端立即将数据返回,客户端根据新旧数据对比决定是否使用这个结果。

  • 长轮询
    长轮询是在请求的过程中,若是服务器端数据并没有更新,那么则将这个连接挂起,直到服务器推送新的数据,再返回,然后再进入循环周期。

短轮询的优点是编程实现简单,缺点是无效请求多,每一次无效请求都会浪费带宽和服务器资源;并且对服务器的压力大,定时发送请求,可能服务其短时间内并发很高,容易拖垮服务器;

长轮询的优点是减少 客户端的无效请求,缺点是服务端会挂起大量的请求,增加资源消耗。微信的网页版登录就是基于长连接做的。

三、webSocket

Websocket的底层通信也是基于TCP连接的,但是要HTTP先行,在和服务端建立了链接后,服务端有数据有了变化后会主动推送给前端。

WebSocket客户端首先会向服务器通过Http协议发送几个特别的Header,告诉服务器现在是Http协议,要升级到WebSocket,Header有:

  • Upgrade:websocket
  • Connection:Upgrade
  • Sec-WebSocket-key:xxx
  • Sec-WebSocket-Protocol:chat,superchat
  • Sec-WebSocket-Version:xx

服务器收到请求并且建立成功后,会返回Sec-WebSocket-Accept、Sec-WebSocket-Protocol 两个header给客户端,且Http Status 为101表示协议切换成功。

WebSocket的优点:请求响应快,不浪费资源。websocket则允许在一条ws连接上同时并发多个请求,即发送请求A后,可以立即发送请求B、C等,避免了每一次http协议交互的头部信息很多,占用更少的带宽资源。

缺点是开发成本高,尤其是在分布式部署的环境中,数据同步问题。比如在聊天系统场景中,一个用户发出一条消息,需要推送到其聊天的多个好友。客户端与服务器1保持连接,服务器1能够将数据推送到与其保持连接的客户端,但是集群的其他服务器的数据同步需要借助比如MQ等方式。

WebSocket在大量请求、高并发的场景下,代码的开发成本是比较高的,但是由于能做到真正的实时服务,并且节省大量带宽资源,很多聊天、音视频、弹幕等都会使用WebSocket。

 

 

 

 

 

你可能感兴趣的:(高并发场景)