现在确实有不少这样的场景,当后台数据发生变化,需要主动“通知”前台进行页面刷新,实现方案有这么几种:

轮询

很容易理解,实现起来也非常简单的一种方法:客户端每隔一段时间向后台发送一次请求,把最新的数据取回来。

当然缺点也比较明显,如果定时任务的时间设置比较长,那么数据更新和展示会不及时;如果定时任务的时间设置的比较短,那么频繁地访问后台,也会增加后台服务器的压力。

WEB实时推送方案分享-网络技术中心

长轮询

如果是轮询的话,客户端每次向后台请求数据的时候,都会建立一次连接;而长轮询,客户端发送请求给服务器之后,如果有最新数据的话,就直接返回,如果没有最新数据的话,就等待,当有新数据的时候再返回。

缺点也显而易见,因为保持连接也是会消耗资源的,并且如果长时间没有新数据的话,也会发生超时。

WEB实时推送方案分享-网络技术中心

Iframe

这个方式的本质是基于Iframe的HTTP长连接实现;在HTML页面里嵌入一个隐蔵的Iframe,然后把src属性设为一个长连接请求,服务器就可以向Iframe传输数据了。

维护长链接就需要增加开销,而且需要考虑连接中断、重连等问题。

WEB实时推送方案分享-网络技术中心

WebSocket

HTTP协议的不足,在于HTTP协议只能由客户端发起请求,并且一个Request要对应一个Response(长链接也是如此)。

WebSocket,是要在客户端和服务器之间,建立一个通道,建立一个【真的长链接】;一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送数据,这个是真正意义的双向通信;并且数据格式可以是文本,也可以是二进制数据。

WEB实时推送方案分享-网络技术中心