作者 Anil Bhatt译者 张凯峰 发布于 2007年7月19日 上午9时35分
Delft科技大学的Engin Bozdag、Ali Mesbah和Arie van Deursen一起讨论了下面这些可以实现基于web的实时事件通知的方法:
1.HTTP拉取方式:在这种传统的方法中,客户端以用户可定义的时间间隔去检查服务器上的最新数据。这种拉取 方式的频率要足够高才能保证很高的数据精确度,但高频率可能会导致多余的检查,从而导致较高的网络流量。而另一方面,低频率则会导致错过更新的数据。理想 地,拉取的时间间隔应该等于服务器状态改变的速度。
2.HTTP流:这种方法由存在于不间断的HTTP连接响应中或某个XMLHttpRequest连接中的服务器数据流所组成。
3.反转AJAX:服务流应用到AJAX,就是所谓的反转AJAX 或者COMET 。它使得服务器在某事件发生时可以发送消息给客户端,而不需要客户端显式的请求。目标在于达到状态变化的实时更新。COMET使用了HTTP/1.1中的持续连接的特性。通过HTTP/1.1,除非另作说明,服务器和浏览器之间的TCP连接会一直保持连接状态,直到其中一方发送了一条明显的“关闭连接”的消息,或者有超时以及网络错误发生。
4.长时间轮询:也就是所谓的异步轮询,这种方式是纯服务器端推送方式和客户端拉取方式的混合。它是基于BAYEUX协议的。 这个协议遵循基于主题的发布——订阅机制。在订阅了某个频道后,客户端和服务器间的连接会保持打开状态,并保持一段事先定义好的时间。如果服务器端没有事 件发生,而发生了超时,服务器端就会请求客户端进行异步重新连接。如果有事件发生,服务器端会发送数据到客户端,然后客户端重新连接。
在他们的实验性研究中,作者们在一个利用COMET推送方式实现(Dojo的Cometd库)的AJAX应用和一个纯拉取方式的应用之间,对数据一致性、服务器性能、网络性能以及数据遗失进行了比较。
他们总结说:
“...如果我们想要高数据一致性和高网络性能,我们就应该选择推送方式。但是,推送会带来一些扩展性问题;服务器应用程序CPU使用率是拉取方式 的7倍。根据我们的结果,服务器性能会在350-500个用户时趋于饱和。对于更大数量的用户,负载均衡和服务器集群技术就在所难免了。
使用拉取方式,要想达到完整的数据一致性以及很高的网络性能是很困难的。如果拉取的时间间隔大于数据更新的时间间隔,就会发生一些数据的遗失。而如 果小于数据更新的时间间隔,网络性能就会受到影响。拉取方式只有在拉取时间间隔等同于数据更新时间间隔时,才会恰到好处。但是,为了达到那样的目标,我们 就需要提前知道准确的数据更新时间间隔。然而,数据更新的时间间隔很少是静态不变并可以预知的。这使得拉取方式只有在数据是根据某种特定模式发布的情况才 有用。”
一些其他Comet Ajax服务器推送模型的实现:
Pushlets :一个开源框架,可以让服务器端java对象推送事件到浏览器端javascript,java applet,或者flash应用程序
查看英文原文:http://www.infoq.com/news/2007/07/pushvspull
分享到:
相关推荐
服务器推送技术的核心在于突破传统的拉取模式,实现服务器端到客户端的数据推送。为了实现这一目标,开发者们提出了多种方法和技术。以下是一些主要的技术方案: ##### 1. 传统轮询(Polling) - **定义**:传统轮询...
`datapush` 是一个基于 jQuery 的插件,主要设计用于在 Web 应用程序中处理数据的推送和拉取操作。这个插件旨在简化处理复杂数据表示的过程,尤其是在用户界面更新和数据同步方面。它使得前端开发人员能够更高效地与...
模拟HttpRequest请求登录http://mp.weixin.qq.com/ ,然后总结出上面的ajax请求URL,解析网页数据,实现拉取用户粉丝列表,根据fakeid推送图文消息
然而,Ajax无法满足服务器主动推送消息的需求,这对于某些实时性要求高的应用(如股票系统、实时通讯)至关重要。 在Web的原始访问机制中,服务器是被动响应客户端发起的请求,即“拉取”数据。为了实现服务器推送...
总的来说,Netty4推送与Kafka消费的集成提供了一种高效、可扩展的方式来实现实时数据传输。这种技术组合在大数据、日志监控、实时分析等领域有着广泛的应用。理解并掌握这两项技术的结合,对于提升系统的响应速度和...
- **Comet技术**:一种模拟服务器推的技术,让服务器主动推送信息到客户端,提升实时性。 - **缓存利用**:对不经常变化的数据,如好友列表,可以缓存在本地,减少网络请求。 5. **兼容性和用户体验** - **跨...
Comet是一种持久性连接技术,允许服务器主动推送数据到客户端,而不是等待客户端请求。这在Asp.net中可以通过 SignalR 库实现,SignalR支持WebSocket、Server-Sent Events(SSE)、Long Polling等多种实时通信方式。...
总结来说,Ajax-pushlet-client.js是通过面向对象的JavaScript技术,利用XMLHttpRequest对象实现HTTP长连接,从而实现服务器向客户端的实时数据推送。其内部结构清晰,逻辑严谨,通过状态管理和事件驱动,有效地处理...
若要实现聊天室、WEBQQ、在线客服、邮箱等这些即时通讯的应用,就要用到“ 服务器推送技术(Comet)”。 传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的...
3. **StAX (Streaming API for XML)**:StAX提供了一种更高效的流式解析方法,允许应用程序以拉取或推送的方式处理XML事件。Java的`javax.xml.stream.XMLInputFactory`、`javax.xml.stream.XMLEventReader`和`javax....
5. **Comet(推送和拉取):** 传统的 AJAX 请求是基于客户端发起的,但有时需要服务器主动向客户端推送数据,这就需要用到 Comet 技术。 #### 六、JavaScript 库的选择 为了简化 AJAX 的开发过程,市面上出现了...
- `git push`:推送本地分支到远程仓库。 - `git pull`:从远程仓库拉取并合并到本地仓库。 在合并代码时,可能会遇到代码冲突,需要手动解决这些冲突后,再进行提交。 git命令的使用是为了管理源代码的版本,以及...
9. **性能测试与优化**: 对于实时聊天系统,性能测试是必不可少的,包括测试连接建立速度、消息推送延迟以及在高并发情况下的稳定性。根据测试结果,可以调整DWR的配置参数,如超时设置、缓冲区大小等,以提升系统的...
服务器推与传统的客户端拉取(如Ajax轮询)相比,有显著优势。在服务器推模型中,服务器在有新消息时主动发送给客户端,而无需客户端持续不断地请求更新。这减少了不必要的网络请求,降低了服务器压力,提高了用户...
通过比较“拉取”与“推送”两种技术方案的优劣,寻找更为高效的数据更新机制,以改善用户体验。 #### 二、Pull与Push的技术原理及应用场景 - **Pull技术原理**: - 客户端在固定时间间隔或特定事件触发下,向...
例如,使用Servlet或者Controller来处理HTTP请求,生成XML或JSON数据,然后配合前端JavaScript代码实现数据的定时拉取或实时推送。 总的来说,FusionCharts提供多种方式实现数据的实时刷新,开发者可以根据项目需求...
通过对各种数据推送技术的分析比较,最终选择了基于AJAX(Dojo)和CometD的组合作为实现方案。通过本文的描述,读者可以了解到如何在实际项目中应用这些技术,并构建出高效稳定的实时数据监控系统。
9. **源代码管理**:VSCode集成了Git,支持基本的版本控制操作,如提交、推送、拉取、分支管理等,方便团队协作。 10. **调试工具**:VSCode的调试功能强大且直观,支持多种语言和框架,可以设置断点、查看变量值、...