随着互联网技术的发展,实时性已经成为Web应用的发展趋势。在需求上,越来越多的Web应用开始提供实时性的用户体验,它们希望在页面加载完成后,服务器上更新的消息能及时推送到页面上。目前现有的HTTP协议并不能实现服务器端到浏览器的主动推送,即使是基于HTTP轮询的推送方案,只能使用间隔刷新来模拟推送过程。为了从技术上解决这个问题,HTML5新标准中提出了WebSocket和Server-Sent Event这两种支持服务器主动推送的技术。借助服务器和浏览器之间的长连接,服务器上更新的消息能直接推送到浏览器上,这让构建对实时性要求较高的Web应用(如金融交易、联机游戏和即时聊天)成为了可能。基于目前Web推送上存在的问题和技术上的可行性,本文围绕设计并实现基于HTML5的Web推送系统这个目标,主要做了以下方面的工作:
1.对比分析不同的推送技术方案。本文首先从工作原理和协议细节角度,对不同推送技术方案进行了讨论,分析了不同推送技术在浏览器兼容性、用户体验和应用代价上的情况。然后从协议头的角度,对比分析了不同推送技术方案,在推送相同内容大小的消息的情况下带宽利用率和时延的结果,得出了HTML5的WebSocket和Server-Sent Event技术来实现服务器主动推的合理性和有效性。
2.设计并实现一个可复用的基于HTML5的Web消息推送系统。在推送技术上,我们选择WebSocket和Server-Sent Event来实现低延时的消息推送,并针对不支持HTML5推送技术的浏览器使用HTTP轮询作为兼容性方案。系统使用Node.js和RabbitMQ消息队列,可以承受高并发的消息推送。在降低系统的集成难度和应用代价方面,本系统将消息推送作为一种Web服务提供给用户使用。应用Docker容器作为系统运行环境提高了本系统的可移植性,提供Restful接口来接收消息通知以达到解耦对服务端实现的依赖。
3.验证本系统在设计实现上的合理性和可行性。首先介绍与爱立信的OSS系统集成实现基站实时监控功能的步骤,通过这个案例说明了本文设计的系统在实现上满足易于集成的设计目标。然后设计实验对比分析,验证了Node.js在实现消息推送系统上的优越性,最后在实验中从消息送达时延,网络流量和服务器硬件资源消耗对不同推送技术进行横向对比,证明了使用HTML5推送技术在解决Web推送问题上是有效的。