【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Ajax 推送与拉取方式的比较

  • 2007-07-19
  • 本文字数:1301 字

    阅读完需:约 4 分钟

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

  • Pushlets :一个开源框架,可以让服务器端 java 对象推送事件到浏览器端 javascript,java applet,或者 flash 应用程序

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

2007-07-19 09:354210
用户头像

发布了 127 篇内容, 共 42.0 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

让三驾马车奔腾:华为如何推动空间智能化发展?

脑极体

全屋智能

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建SpringSecurity权限框架

小鲍侃java

Java' spring、

Go 注释

小万哥

Go 程序员 云原生 后端 开发

代码随想录Day41 - 动态规划(三)

jjn0703

上海博卡:基于支付宝公私域隐私计算的精准营销探索实践

TRaaS

小程序 支付宝小程序 隐私计算

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原

小小白

腾讯云 Cloud Studio

企业轻量应用,云耀云服务器L实例能帮大忙!

YG科技

有奖活动 | 大咖论道:一同畅聊鸿蒙生态

HarmonyOS开发者

HarmonyOS

使用 Vue 自定义拖放文件上传

互联网工科生

GitHub Vue 代码

梳理日常开发涉及的负载均衡

WizInfo

负载均衡 网关

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

BlockChain先知

Programming abstractions in C阅读笔记:p76-p83

codists

何时使用Elasticsearch而不是MySql

越长大越悲伤

MySQL elasticsearch

字符串匹配算法BM算法

java易二三

编程 程序员 算法 计算机 BM

ps2023ai破解下载 photoshop 2023beta 25.0最新激活安装 永久使用

晴雯哥

并发中atomic BUG分享

FunTester

测试同学如何提升自己的职场竞争力

老张

核心竞争力

redis 的哨兵模式详解和实战

java易二三

Java redis 编程 程序员 计算机

面向大模型的存储加速方案设计和实践

百度Geek说

人工智能 nlp 企业号 8 月 PK 榜

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

威廉META

CMake中使用vcpkg

二哈侠

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

西柚子

探索式测试-用Scrum的套路做测试

大头

Scrum 敏捷测试 探索测试 敏捷迭代

SpringBoot3进阶用法

Java 架构 springboot SpringBoot3

JVM内存管理--GC算法精解(五分钟教你终极算法---分代搜集算法)

java易二三

编程 程序员 计算机 科技 技术宅

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用

汀丶人工智能

人工智能 自然语言处理 知识蒸馏

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

鳄鱼视界

深入理解 HDFS(三):HRPC

冰心的小屋

hdfs RPC hadoop rpc

开发秘籍,教你快速完成MySQL数据的差异对比!

NineData

数据库 监控治理 NineData 对比工具 对比软件

挖掘数据价值,助力企业智能升级丨华为云华为云通用AI解决方案简评

YG科技

如何使用Kafka构建事件驱动的架构

这我可不懂

kafka EDA 事件流

Ajax推送与拉取方式的比较_Java_Anil Bhatt_InfoQ精选文章