前端 短/长轮询和WebSocket的优缺点

johnnywoo · November 17, 2019 · 10 hits

闲言

短轮询

定义:其实就是普通的轮询。指在特定的的时间间隔(如每 1 秒),由浏览器对服务器发出 HTTP request,然后由服务器返回最新的数据给客户端的浏览器。

应用场景:传统的 web 通信模式。后台处理数据,需要一定时间,前端想要知道后端的处理结果,就要不定时的向后端发出请求以获得最新情况。

优点:前后端程序编写比较容易。

缺点:请求中有大半是无用,难于维护,浪费带宽和服务器资源;响应的结果没有顺序(因为是异步请求,当发送的请求没有返回结果的时候,后面的请求又被发送。而此时如果后面的请求比前面的请 求要先返回结果,那么当前面的请求返回结果数据时已经是过时无效的数据了)。

实例:适于小型应用。

长轮询

定义:客户端向服务器发送 Ajax 请求,服务器接到请求后 hold 住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。

优点:在无消息的情况下不会频繁的请求,耗费资源小。

缺点:服务器 hold 连接会消耗资源,返回数据顺序无保证,难于管理维护。

WebSocket

定义:Websocket 是基于 HTTP 协议的,在和服务端建立了链接后,服务端有数据有了变化后会主动推送给前端。

优点:请求响应快,不浪费资源。(传统的 http 请求,其并发能力都是依赖同时发起多个 TCP 连接访问服务器实现的 (因此并发数受限于浏览器允许的并发连接数),而 websocket 则允许我们在一条 ws 连接上同时并发多个请求,即在 A 请求发出后 A 响应还未到达,就可以继续发出 B 请求。由于 TCP 的慢启动特性(新连接速度上来是需要时间的),以及连接本身的握手损耗,都使得 websocket 协议的这一特性有很大的效率提升;http 协议的头部太大,且每个请求携带的几百上千字节的头部大部分是重复的,websocket 则因为复用长连接而没有这一问题。)

缺点:主流浏览器支持的 Web Socket 版本不一致;服务端没有标准的 API,下图是各大主流对 websocket 的兼容性列表。

实例:实现即时通讯:如股票交易行情分析、聊天室、在线游戏等,替代轮询和长轮询

解决:解决了 http 协议的两个问题:

  1. 服务端的被动性。http 协议是只有客户端询问之后才回复。解决了同步有延迟的问题
  2. 解决了服务器上消耗资源的问题

参考文献

短轮询、长轮询和 web socket 定义及其实现

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.