[软技能] 第1397天 前端怎样实现即时通讯?

91 阅读2分钟

短轮询(历史)

使用 setIntervalsetTimeout 轮询请求接口

虽然已经是历史,但是在目前现有逻辑业务中也会存在,第一次碰到的情况是后端排期问题,第二次碰到是后端技术问题

优点:简单

缺点:除了优点都是缺点,不合理,浪费http请求,浪费前后端资源,大量无效请求,缺失时效性

长轮询(历史)

还是短连接请求,后端判断是否有新的数据,有则返回并关闭连接,前端再重新发起请求,没有则一直保持,直到被浏览器强行关闭,再发起请求。

优点:在短轮询的基础上优化了请求评率,解决了部分时效性问题

缺点:除了优点都是缺点,同上

SSE(历史)

发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一次用时很长的下载。

缺点:兼容性不好(IE,Edge不支持);服务器只能单向推送数据到客户端;

WebSocket

全新长链接API

  • HTML5 WebSocket规范定义了一种API,使Web页面能够使用WebSocket协议与远程主机进行双向通信。与轮询和长轮询相比,巨大减少了不必要的网络流量和等待时间。
  • WebSocket属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。但不是基于HTTP协议的,只是在建立连接之前要借助一下HTTP,然后在第一次握手是升级协议为ws或者wss

优点:开销小,语义化规范,双向数据流,支持二进制传输

缺点:可能是开发成本(前后端都可以使用npm解决)

更多题目:

github.com/haizlin/fe-…