前言
实现”实时通讯“的功能,在以前来说,一般都是基于HTTP请求的,但HTTP是无状态请求,每次连接完毕,都要重新建立连接,才能实现通信,服务器端不能主动通讯,所以会造成信息延迟和性能问题。
1、性能:http协议一次请求只能一次响应,每次请求客户端和服务器都需要解析请求头信息,效率低下。
2、延时:短轮询有延时问题。
3、服务端不能主动推送。
短轮询(Polling)
客户端每隔一段时间都给服务器发送请求,询问是否有新的消息
优点
1、无兼容性问题
2、不用任何新的api
缺点
1、有延时:时间间隔太短,服务器压力大,间隔时间长延时太长
2、服务器不能主动推送
长轮询(Long Polling)
客户端发起长轮询,如果服务端的数据没有发生变更,会 hold 住请求,直到服务端的数据发生变化,或者等待一定时间超时才会返回。返回后,客户端又会立即再次发起下一次长轮询。长轮询解决了短轮询不能实时和连接
优点
1、无兼容性问题
2、可以实时获取消息。
3、对消息变化的轮询由客户端变成了服务器,而且只有连接断开后客户端才会再次请求,大大减少了HTTP次数。
缺点
1、服务器hold连接会消耗资源
sse
服务器使用流信息向客户端推送信息。严格地说,http 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息。也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。
优点
1、无兼容性问题
2、SSE 默认支持断线重连
3、可以实现服务器向客户端推送消息
缺点
1、一般只用来传送文本,二进制数据需要编码后传送
websorket
- websorket是HTML5新特性,是基于TCP协议的应用层协议,也是全双工通讯协议。
- 建立连接时的握手阶段采用的是HTTP,默认端口也是80或443。
- 协议标识是ws,加密的是wss(有SSL证书),连接时的服务器网址就是 URL。
- 连接的时候不受同源跨域限制,客户端可以与任意服务器通信。
- 可以发送文本,也可以发送二进制数据。
优点
1、双向通信,客户端和服务器端可以互发消息
2、建立一次TCP连接,就可以实现通信
3、不受同源跨域限制
缺点
1、有兼容性问题
参考链接如下
https://blog.youkuaiyun.com/wecloud1314/article/details/126158204