web前端

位置:IT落伍者 >> web前端 >> 浏览文章

基于WEB 的实时事件通知方案


发布日期:2020年01月20日
 
基于WEB 的实时事件通知方案

基于 WEB 的实时事件通知方式大致有五种方案HTTP拉取方式(pull)HTTP流Long PollingFlash XMLSocket方式Java Applet

首先说下Comet这个词Comet 这个词是最早由Alex Russell(Dojo Toolkit 的项目 Lead)提出的称基于 HTTP 长连接无须在浏览器端安装插件的服务器推(Push)技术为Comet

HTTP拉取方式(pull)

在这种传统的方法中客户端以用户可定义的时间间隔去检查服务器上的最新数据这种拉取方式的频率要足够高才能保证很高的数据精确度但高频率可能会导致多余的检查从而导致较高的网络流量而另一方面低频率则会导致错过更新的数据理想地拉取的时间间隔应该等于服务器状态改变的速度常见的实现如利用 <meta httpequiv=refresh content= /> tag当然利用xmlHttpRequest定时取也是一种方法

HTTP流(Push机制)

HTTP流有两种形式* Page Stream 页面上不间断的HTTP连接响应(HTTP Keep Alive)

通过在 HTML 页面里嵌入一个隐蔵帧(iframe)然后将这个隐蔵帧的 SRC 属性设为对一个长连接的请求服务器端就能源源不断地往客户端输入数据

* Service Stream XMLHttpRequest连接中的服务器数据流

客户端是在 XMLHttpRequest 的 readystate 为 (即数据传输结束)时调用回调函数进行信息处理当 readystate 为 数据传输结束连接已经关闭Mozilla Firefox 提供了对 Streaming AJAX 的支持即 readystate 为 时(数据仍在传输中)客户端可以读取数据从而无须关闭连接就能读取处理服务器端返回的信息IE 在 readystate 为 不能读取服务器返回的数据目前 IE 不支持基于 Streaming AJAX

使用 Page Stream(iframe) 请求一个长连接有一个很明显的不足之处IEMorzilla Firefox 下端的进度栏都会显示加载没有完成而且 IE 上方的图标会不停的转动表示加载正在进行Google 的天才们使用一个称为htmlfile的 ActiveX 解决了在 IE 中的加载显示问题并将这种方法用到了 gmail+gtalk 产品中Alex Russell 在 What else is burried down in the depths of Googles amazing JavaScript?文章中介绍了这种方法Zeitoun 网站提供的 cometiframetargz封装了一个基于 iframe 和 htmlfile 的 JavaScript comet 对象支持 IEMozilla Firefox 浏览器可以作为参考(?p=

长时间轮询(Long Polling)

也就是所谓的异步轮询(Asynchronous Polling)这种方式是纯服务器端推送方式和客户端拉取方式的混合它是基于BAYEUX协议()的这个协议遵循基于主题的发布——订阅机制在订阅了某个频道后客户端和服务器间的连接会保持打开状态并保持一段事先定义好的时间(默认为秒)如果服务器端没有事件发生而发生了超时服务器端就会请求客户端进行异步重新连接如果有事件发生服务器端会发送数据到客户端然后客户端重新连接

服务器端会阻塞请求直到有数据传递或超时才返回

客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后再次发出请求重新建立连接

当客户端处理接收的数据重新建立连接时服务器端可能有新的数据到达这些信息会被服务器端保存直到客户端重新建立连接客户端会一次把当前服务器端所有的信息取回

Flash XMLSocket(push机制)

上一篇:学习xml之给个理由先

下一篇:WCF的Web编程模型资源