作者 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服务器推送模型的实现:
-
Orbited :一种开源的分布式Comet服务器
-
AjaxMessaging :Ruby on Rails的Comet插件
-
Pushlets :一个开源框架,可以让服务器端java对象推送事件到浏览器端javascript,java applet,或者flash应用程序
-
Lightstreamer :提供基于AJAX-COMET模式的HTTP流的商业实现
-
Pjax :Ajax的推送技术
相关推荐
广义系统通知,究竟是推送还是拉取呢?不同业务,不同需求,实现方式不同。 系统对1的通知: • 实时性要求高,可以推送 • 实时性要求低,可以拉取 系统对N的通知: • 登录弹窗新闻,拉取更佳,可以用一个last_...
Andorid 项目中使用FFmpeg拉取RTSP流 然后 推送到RTMP服务器
GitHub教程 进行提交,推送,拉取,分支和合并
由于咨询者众多,关注点也比较集中,我希望通过本文的案例分析和对推送服务设计要点的总结,帮助大家在实际工作中少走弯路。 1.2. 推送服务 移动互联网时代,推送(Push)服务成为App应用不可或缺的重要组成部分,推...
Windows下实现的,git的自动拉取推送,svn的自动拉取和推送,maven自动编译,angular的自动打包发布,bat脚本
如何推送数据至Prometheus,推送和拉取分别用于什么样的场景(本次分享内容) Prometheus数据的结构以及查询语言PromQL的使用 Java应用如何和Prometheus集成,如何启用服务发现,如果自定义业务指标 ...
Gitlab拉取_推送代码,提交合并请求.docx
数据推送 用于推送和拉取复杂表示的 JQuery 插件
为了解决这些问题,未来的信息服务系统发展方向就是与拉取信息相对立的信息推送技术的产生,这种技术将改变人们获取网络信息的方式。而在个性化突显的现代社会,每个个体需要的是针对的服务方式,所以个性化主动信息...
Server_Pushes:回购以从服务器推送和拉取文件
消息推送主要有两种实现方式,客户端定时“拉取”和服务器主动“推送”。“拉取”方式是客户端按照预设的触发条件和时间间隔,不停地向服务器查询更新,然后发出拉取请求以获取最新消息;而“推送”的方式则是在...
本例子实现了推送本地视频至流媒体服务器(以RTMP为例)。是使用FFmpeg进行流媒体推送最简单的教程。 1.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。
模拟HttpRequest请求登录http://mp.weixin.qq.com/ ,然后总结出上面的ajax请求URL,解析网页数据,实现拉取用户粉丝列表,根据fakeid推送图文消息
保险公司对接医疗平台拉取、推送健康保险相关的就诊类数据接口样例。 一般主要包括和医院的药品,就诊信息,检验检测,费用等的数据交换接口。
• 好友状态同步,是采用推送的方式同步 • 群友状态同步,由于消息风暴扩散系数过大,一般采用拉取的方式同步 • 群友状态同步,还能采用按需拉取的优化方式,进一步降低服务端压力 • “消息风暴扩散系数”是指一...
主要介绍了git push & git pull 推送/拉取分支的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
ffmpeg拉取网络流,并推送rtmp格式到rtmp服务器
网上用C/C++调用FFmpeg的API例子很多, ...参考文档实现了拉取rtmp流并播放,本文在参考文档提供的源码的基础上,结合C/C++调用FFmpeg的API的例子,做了一些修改,用C#使用ffmpeg.autogen实现推送udp组播流。
为了适应实际应用中对信息获取及时性,耗电量,以及网络环境等方面的需求,需要用推送的方式取代传统拉取的方式来进行消息的传递,MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)就是专为这种情况所...
通知事项小型HTTP服务器,用于推送和... :将通知推送到服务器。 如果未设置主题,则通知将被视为全局通知。 主体定义了通知的有效负载。 Content-Type标头定义了有效载荷的格式。 目前支持: application/json :JSO