Comet vs SSE vs Websocket

在标准的HTTP模型中,服务器无法与客户端启动连接、发送未经请求的HTTP响应给客户端,因此,为了尽快接收异步事件,就需要服务器能在不等待的情况下向客户端发送更新消息,目前主要存在以下几种方法:

长/短轮询:(客户端拉动)

Iframe流:(服务端推送)

SSE:(服务端推送)

Websocket:(服务端推送)

轮询

轮询是客户端定期向服务端请求新数据的一种技术,主要分为短轮询和长轮询。


    短轮询: 基于Ajax请求的计时器,固定延时调用;


    长轮询:基于Comet(是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求),建立连接后,一直等待服务端有数据之后的响应(或超时),返回后再重新连接;

Iframe流(HTTP流式传输)


iframe流是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间创建一条长连接,服务器向iframe传输数据(通常是HTML,对客户端js的调用)来实时更新页面。

Tip:轮询和Iframe流都属于Comet,一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无需客户发出请求

SSE


Server-Send Events 实现了客户端请求服务端,然后服务端利用与客户端建立的这条通信连接push数据给客户端,客户端接收数据并处理。

本质:以流信息的方式通信,完成一次用时很长的下载。

特点:

    1. 使用HTTP协议,现有的服务器软件都支持;

    2. 轻量级,使用简单;

    3. 默认支持断线重连,Websocket需要自己实现;

    4. 一般只用来传送文本,二进制数据需要编码后传送;

    5. 支持自定义发送的消息类型。


Websocket


Websocket是一种应用层协议,提供了客户端和服务端之间全双工通信机制。

特点:

     1. 服务器可以主动向客户端推送消息,客户端也可以主动向服务器发送信息;

     2. 建立在TCP协议之上,服务器端的实现比较容易;

     3. 没有同源限制,客户端可以与任意服务器通信;

     4. 协议标识符是ws(如果加密,则为wss),服务网址就是URL

     5. 默认支持传送二级制数据,也可以传输文本。


优缺点及适用场景对比


你可能感兴趣的:(Comet vs SSE vs Websocket)