-
Ajax短轮询
利用XHR,通过setInterval定时向后端发送请求,优点是,短连接;实现非常简单;缺点是会造成数据在一小段时间内不同步和大量无效的请求,增加后端处理压力。 -
Ajax长轮询
在后端数据没有更新的时候不再返回空响应,而且后端一直保存连接(需要注意释放Web容器主线程),直到后端有数据变化,则相应请求并且关闭连接,前端收到数据,马上再次向后端发起请求,并处理刚刚收到的数据。 -
SSE(Server-Sent Events)
基于H5,部署在EventSource对象上。目前,除了IE系列,其他主流浏览器都支持。基于流文本实现,不支持其他类型,并且有自己的格式。实现简单,只能服务器端推送到客户端。 -
WebSocket
基于H5,WebSocket其实是一个新协议,跟http协议基本没有关系,只是为了兼容现有浏览器的握手规范而已。WebSocket通信协议包含两个部分,一是开放性HTTP握手连接协商连接参数,二是二进制消息分帧机制(接收消息的文本和二进制数据传输)。它是一个独立完善的协议,也可以在浏览器之外实现。
功能强大,但是实现比较复杂,与SSE的效率是一样的。 -
http2.0的推送
a. 要启用http2必须使用OpenSSL/ssl加密协议
b. 很多浏览器不支持
SSE和WebSocket,只有一次连接;Ajax长短轮询都有很多次连接。
实现选择: 没有最好的,只选最适合的。
一般应用可以采用SSE + Ajax长轮询。浏览器支持EventSource,使用SSE,不支持使用Ajax长轮询。