短轮询(历史)
使用 setInterval 和 setTimeout 轮询请求接口
虽然已经是历史,但是在目前现有逻辑业务中也会存在,第一次碰到的情况是后端排期问题,第二次碰到是后端技术问题
优点:简单
缺点:除了优点都是缺点,不合理,浪费http请求,浪费前后端资源,大量无效请求,缺失时效性
长轮询(历史)
还是短连接请求,后端判断是否有新的数据,有则返回并关闭连接,前端再重新发起请求,没有则一直保持,直到被浏览器强行关闭,再发起请求。
优点:在短轮询的基础上优化了请求评率,解决了部分时效性问题
缺点:除了优点都是缺点,同上
SSE(历史)
发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一次用时很长的下载。
缺点:兼容性不好(IE,Edge不支持);服务器只能单向推送数据到客户端;
WebSocket
全新长链接API
- HTML5 WebSocket规范定义了一种API,使Web页面能够使用WebSocket协议与远程主机进行双向通信。与轮询和长轮询相比,巨大减少了不必要的网络流量和等待时间。
- WebSocket属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。但不是基于HTTP协议的,只是在建立连接之前要借助一下HTTP,然后在第一次握手是升级协议为ws或者wss
优点:开销小,语义化规范,双向数据流,支持二进制传输
缺点:可能是开发成本(前后端都可以使用npm解决)