【春节日更】websocket和轮询及长轮询的理解

2022-07-22 14:14:01 浏览数 (1)

今日分享:

websocket 和 轮询 及 长轮询 的理解

01

轮询

轮询 :客户端以一定的时间间隔向服务端发出请求,以频繁请求的方式来保持客户端和服务器端的同步。

如下:

客户端:啦啦啦,有没有新信息(Request)

服务端:没有(Response)

客户端:啦啦啦,有没有新信息(Request)

服务端:没有。。(Response)

客户端:啦啦啦,有没有新信息(Request)

服务端:你好烦啊,没有啊。。(Response)

客户端:啦啦啦,有没有新消息(Request)

服务端:好啦好啦,有啦给你。(Response)

客户端:啦啦啦,有没有新消息(Request)

服务端:。。。。。没。。。。没。。。没有(Response)

---- loop

02

长轮询

长轮询:当服务器收到客户端发来的请求后, 服务器端不会直接进行响应,而是先将这个请求挂起,然后判断服务器端数据是否有更新。

如果有更新,则进行响应,如果一直没有数据,则到达一定的时间限制(服务器端设置)才返回 。

客户端JavaScript响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接

如下:

客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request)

服务端:额。。等待到有消息的时候。。来 给你(Response)

客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request)

-loop

03

websocket

websocket 解决了HTTP的这几个难题。首先,被动性,当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端啦

所以上面的情景可以做如下修改。

客户端:啦啦啦,我要建立Websocket协议,需要的服务:chat,Websocket协议版本:17(HTTP Request)

服务端:ok,确认,已升级为Websocket协议(HTTP Protocols Switched)

客户端:麻烦你有信息的时候推送给我噢。。

服务端:ok,有的时候会告诉你的。服务端:balabalabalabala

服务端:balabalabalabala

服务端:哈哈哈哈哈啊哈哈哈哈

服务端:笑死我了哈哈哈哈哈哈哈

04

总结

长轮询和短轮询比起来,明显减少了很多不必要的http请求次数,相比之下节约了资源。长轮询的缺点在于,连接挂起也会导致资源的浪费。

HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术。使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力。

WebSocket 协议本质上是一个基于 TCP 的协议。

兼容性角度考虑,短轮询 > 长轮询 > WebSocket;

性能方面考虑,WebSocket > 长轮询 > 短轮询。

0 人点赞