`
Jatula
  • 浏览: 276764 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Ajax推送与拉取方式的比较

阅读更多

作者 Anil Bhatt译者 张凯峰 发布于 2007年7月19日 上午9时35分

社区 Java 主题 Web框架,
JavaScript 使用Ajax可以开发出基于浏览器的具有高用户交互性和几乎不易觉察到延迟的web应用。实时的动态数据比如新闻标题、证券报价和拍卖行情都需要尽快地发送给用户。然而,AJAX仍然受限于web请求/响应架构的弱点,使得服务器不能推送实时动态的web数据。

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服务器推送模型的实现:

  • Orbited :一种开源的分布式Comet服务器
  • AjaxMessaging :Ruby on Rails的Comet插件
  • Pushlets :一个开源框架,可以让服务器端java对象推送事件到浏览器端javascript,java applet,或者flash应用程序
  • Lightstreamer :提供基于AJAX-COMET模式的HTTP流的商业实现
  • Pjax :Ajax的推送技术

查看英文原文http://www.infoq.com/news/2007/07/pushvspull

分享到:
评论

相关推荐

    服务器推送技术

    服务器推送技术的核心在于突破传统的拉取模式,实现服务器端到客户端的数据推送。为了实现这一目标,开发者们提出了多种方法和技术。以下是一些主要的技术方案: ##### 1. 传统轮询(Polling) - **定义**:传统轮询...

    datapush:用于推送和拉取复杂表示的 JQuery 插件

    `datapush` 是一个基于 jQuery 的插件,主要设计用于在 Web 应用程序中处理数据的推送和拉取操作。这个插件旨在简化处理复杂数据表示的过程,尤其是在用户界面更新和数据同步方面。它使得前端开发人员能够更高效地与...

    .net微信主动推送图文消息

    模拟HttpRequest请求登录http://mp.weixin.qq.com/ ,然后总结出上面的ajax请求URL,解析网页数据,实现拉取用户粉丝列表,根据fakeid推送图文消息

    服务器推送技术[借鉴].pdf

    然而,Ajax无法满足服务器主动推送消息的需求,这对于某些实时性要求高的应用(如股票系统、实时通讯)至关重要。 在Web的原始访问机制中,服务器是被动响应客户端发起的请求,即“拉取”数据。为了实现服务器推送...

    netty4推送+kafka消费

    总的来说,Netty4推送与Kafka消费的集成提供了一种高效、可扩展的方式来实现实时数据传输。这种技术组合在大数据、日志监控、实时分析等领域有着广泛的应用。理解并掌握这两项技术的结合,对于提升系统的响应速度和...

    Web QQ(ajax 实现的一个QQ程序)

    - **Comet技术**:一种模拟服务器推的技术,让服务器主动推送信息到客户端,提升实时性。 - **缓存利用**:对不经常变化的数据,如好友列表,可以缓存在本地,减少网络请求。 5. **兼容性和用户体验** - **跨...

    Asp.net+Ajax做的无刷新聊天室

    Comet是一种持久性连接技术,允许服务器主动推送数据到客户端,而不是等待客户端请求。这在Asp.net中可以通过 SignalR 库实现,SignalR支持WebSocket、Server-Sent Events(SSE)、Long Polling等多种实时通信方式。...

    Pushlet的Ajax-pushlet-client.js分析

    总结来说,Ajax-pushlet-client.js是通过面向对象的JavaScript技术,利用XMLHttpRequest对象实现HTTP长连接,从而实现服务器向客户端的实时数据推送。其内部结构清晰,逻辑严谨,通过状态管理和事件驱动,有效地处理...

    jquery与php结合实现AJAX长轮询(LongPoll)

    若要实现聊天室、WEBQQ、在线客服、邮箱等这些即时通讯的应用,就要用到“ 服务器推送技术(Comet)”。 传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的...

    XML Ajax的应用

    3. **StAX (Streaming API for XML)**:StAX提供了一种更高效的流式解析方法,允许应用程序以拉取或推送的方式处理XML事件。Java的`javax.xml.stream.XMLInputFactory`、`javax.xml.stream.XMLEventReader`和`javax....

    AJAX技术介绍 教你入门

    5. **Comet(推送和拉取):** 传统的 AJAX 请求是基于客户端发起的,但有时需要服务器主动向客户端推送数据,这就需要用到 Comet 技术。 #### 六、JavaScript 库的选择 为了简化 AJAX 的开发过程,市面上出现了...

    基于Flex和BlazeDS推技术实现WEB方式实时监控系统

    2. **实时数据推送**:借助BlazeDS的实时数据推送技术,可以实现服务器端数据的实时更新,并立即将更新的信息推送给所有相关的客户端。这种方式无需客户端不断地向服务器发送请求,从而大大减少了网络流量,提高了...

    Ajax相关学习内容整理.pdf

    - `git push`:推送本地分支到远程仓库。 - `git pull`:从远程仓库拉取并合并到本地仓库。 在合并代码时,可能会遇到代码冲突,需要手动解决这些冲突后,再进行提交。 git命令的使用是为了管理源代码的版本,以及...

    dwr实现的网页即时聊天

    9. **性能测试与优化**: 对于实时聊天系统,性能测试是必不可少的,包括测试连接建立速度、消息推送延迟以及在高并发情况下的稳定性。根据测试结果,可以调整DWR的配置参数,如超时设置、缓冲区大小等,以提升系统的...

    基于Java_BlazeDS_Flex_服务器消息推的聊天室

    服务器推与传统的客户端拉取(如Ajax轮询)相比,有显著优势。在服务器推模型中,服务器在有新消息时主动发送给客户端,而无需客户端持续不断地请求更新。这减少了不必要的网络请求,降低了服务器压力,提高了用户...

    论文:实例对比push 和pull

    通过比较“拉取”与“推送”两种技术方案的优劣,寻找更为高效的数据更新机制,以改善用户体验。 #### 二、Pull与Push的技术原理及应用场景 - **Pull技术原理**: - 客户端在固定时间间隔或特定事件触发下,向...

    fusionchart实时刷新数据总结

    例如,使用Servlet或者Controller来处理HTTP请求,生成XML或JSON数据,然后配合前端JavaScript代码实现数据的定时拉取或实时推送。 总的来说,FusionCharts提供多种方式实现数据的实时刷新,开发者可以根据项目需求...

    实时动态显示的domo系统

    通过对各种数据推送技术的分析比较,最终选择了基于AJAX(Dojo)和CometD的组合作为实现方案。通过本文的描述,读者可以了解到如何在实际项目中应用这些技术,并构建出高效稳定的实时数据监控系统。

    前端HTML CSS JS VUE AJAX AXIOS技术人喜欢用的VSCode软件

    9. **源代码管理**:VSCode集成了Git,支持基本的版本控制操作,如提交、推送、拉取、分支管理等,方便团队协作。 10. **调试工具**:VSCode的调试功能强大且直观,支持多种语言和框架,可以设置断点、查看变量值、...

Global site tag (gtag.js) - Google Analytics