前端如何实现即时通讯

即时通讯的方案

1. 短轮询
2. 长轮询
3. SSE
4. WebSocket

image.png

– 短轮询

客户端和服务器之间会一直进行连接,每隔一段时间就询问一次。前端通常采取setInterval或者setTimeout去不断的请求服务器数据

image.png

– 长轮询

> 客户端发送一个请求到服务端,如果服务端没有新的数据,就保持住这个连接直到有数据。一旦服务端有了数据(消息)给客户端,它就使用这个连接发送数据给客户端。接着连接关闭。

优点:对比轮询做了优化,有较好的时效性。
缺点:占较多的内存资源与请求数。

– SSE(Sever-Send Event 服务端推送事件)

严格地说,HTTP 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming)。

阮一峰(www.ruanyifeng.com/blog/2017/0…)

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

SSE是一种基于HTTP协议,允许服务端向客户端推送数据的HTML5技术缺点:兼容性不好(IE,Edge不支持);服务器只能单向推送数据到客户端;

– WebSocket

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

image.png

具体详解查看juejin.cn/post/684490…

优点:开销小,双向通讯,支持二进制传输。

缺点:开发成本高,需要额外做重连保活。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享