`
faithyacht
  • 浏览: 921 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
_Comet:__一种编程技术,使用它可以在Web Server上向client发送数据而无须来自client的请求。使用此技术可以建立定位于浏览器上的“事件驱动Web应用”。
!!动机:
传统的Web应用仅在client发出请求后才把页面发送回去。对于每个client请求,浏览器进行连接到Web Server的Http连接的初始化工作,当数据返回后这个连接便被关闭了。这种方式的缺点是只有在用户明确地刷新页面或是转移到新页面时被显示的页面才被更新。由于传输这个页面需要一段较长的时间,刷新页面便要花费一段较长的延迟。为了解决这个问题,AJAX被用来通过使Web浏览器只对页面中需要改变的部分发出请求的方式减少数据的更新量。因为传输数据总量被减少了,延迟也相应减少了,整个web站点的反应能力增强了。进一步讲,通过使用异步后台数据传输,当数据正在被接收时用户部分地接收数据,这样Web应用的反应能力被进一步提高了。
但是这样的实践也遇到了一个问题:client必须在请求发送到 Server之前发出一些数据请求。在设计那些需要等待Server端事件发生的应用时(例如一些用户发送数据到Server,在Server处理这些请求之前、事件将发生之前没有任何信息产生),这个问题成为了主要障碍。
一种解决方案被设计出来:应用周期性地轮询Server已发现是否有事件发生。但这不是优雅的:因为应用将浪费大量的时间来对事件完成情况的查询,因此它直接对应用的回应能力造成了破坏。另外,一些网络带宽也被浪费掉了。
一种更好的解决方案:服务器在事件发生时发送消息给client,而不需要client进行询问。这样client将不再周期性地检查server;它能够继续其它的工作并处理事件发生后被server推送过来的数据。这就是Comet所实现的。
Netscape [server push|http://www.it315.org/articles/web/web1.htm]浏览器扩展就是这样的解决方案,但它不与Internet Explorer等其它的浏览器相兼容。
!!技术:
与在Web Server与浏览器之间的一般数据传输不同,使用Comet完成到Server的连接需要特定的结构。Client端应用必须在异步初始化到 Server的连接时保持工作。在Server端,即使不能马上对请求做出回应,连接也要保持直到所期待的事件发生。当事件发生时,server通过之前已经建立的连接把产生的数据推送到client。
连接在此后可能被切断,或者当存在并发事件时可以被保持下去。如果存在并发的多个事件,Server可在此连接上发送事件数据而无须client每次都明确地发送请求。
!!可测量性和可靠性:
这里存在一些潜在的概念:认为一个实现了Comet的Web Server具有很好可测量性。因为连接被保持直到事件发生,所以如果事件不频繁地发生,它能应付一定的连接。但如果不同的连接等待不同的事件,那么这个问题将更糟。管理这样大量连接引发了可观的系统负载。但是Server和其它支持应用正在被开发来更好的支持这样的长连接。
[AJAX/Comet Request Router|http://rphd.sourceforge.net/]是一种机制:提供可测量的Server端(支持低延迟异步和双向的Comet 应用)。它被用作针对任何web或者应用Server的前端,用于部署client请求到某个匹配的Server,这个Server可能是一个特定的程序或者一个针对相应的请求而执行特定应用代码的、通用的Server。[Java Jetty|http://www.mortbay.org/]和[Apache 2.2|http://httpd.apache.org/]提供在使用异步网络操作情况下的内在的支持,它可以减少连接管理上的overhead。这样的话,Web Server逻辑仅在事件发生时发送消息给用户。由于多数操作系统都具有事件驱动I/O子系统,所以这不成问题。
防火墙和HTTP代理在浏览器和Web Server之间能够造成进一步的网络问题。防火墙常常被配置为丢弃超长时间的连接,因此一些商业品质的框架被迫拆卸、重建周期性的“push”连接。而 HTTP代理可能缓冲32Kb或者64Kb的推送信息,无奈之下用来适配检测代理缓冲区大小的系统称为了必要之物。
浏览器造成了进一步的限制:[HTTP1.1规范的8.1.4章节|http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html]说明:“一个单独用户的 client不应该对同一Server或者代理服务器维护两个以上的连接”,这被大多数常见的浏览器(包括Internet Explore盒Firefox)作为推荐。保有一个为HTTP流而打开的连接之做法对于AJAX应用来言是建立了一个性能问题,这样就没有能力在一系列图片被装载时启动一个新的用户发起的数据请求。这个问题常被这样绕过:在推送连接时建立不同的主机名(虽然是同一个物理主机)。在集群Server环境下,信息需要被路由到当前正连接到指定client的Web Server上,有保证的传送需要在Web Server宕机事件发生时被确认。这由典型的管理面向中间件系统(常常被JMS封装)处理。
!!Comet实现:
* [Virgil's One™|http://one.virgil.nl/]
* [SmartClient|http://smartclient.com/]
* [Lightstreamer|http://www.lightstreamer.com/]
* [Fjax|http://www.fjax.net/]
* [Pjax|http://www.icetechnology.com/products/ipushv2/ria.shtml]
* [Server-Sent Events|http://whatwg.org/specs/web-apps/current-work/#scs-server-sent]
* [COMETd|http://cometd.com/]
* [Ajax for IBM WebSphere Platform|https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/ibmajaxw/]
!!外部链接:
* [KnowNow - pioneering implementation of Comet|http://www.knownow.com/article/?id=154]
* [Push Technology for RIA: Two ways of introducing iPush Server to a RIA project|http://www.icetechnology.com/products/ipushv2/ria.shtml]
* [Beyond AJAX: Accelerating Web Applications with Real-Time Event Notification, by Dr. Rohit Khare|http://www.knownow.com/products/docs/whitepapers/KN-Beyond-AJAX.pdf]
分享到:
评论

相关推荐

    embedgen::comet:产生不和谐的嵌入

    "comet"则可能是指一种网络通信技术,通常用于实时数据传输,如 comet 长轮询或 comet 断点续传,这种技术可以增强Web应用的交互性。 然而,"产生不和谐的嵌入"可能意味着在使用embedgen::comet时出现了问题,如...

    ApophisServer:AApophis服务器:comet:

    :comet: Apophis服务器 SOPT第27届虚拟黑客马拉松:APPJAM团队Apophis 项目期限:2020.12.27〜2021.01.15 :comet: 你的早逝要提前面对 “我们通过新的死亡视角审视过去的生活,回顾过去,并通过死亡来重构现在和...

    comet4j 自己写的消息推送 觉得实用

    【标题】"comet4j 自己写的消息推送 觉得实用" 提示我们讨论的是一个自定义实现的基于 Comet4j 的消息推送系统。Comet4j 是一个开源的 Java 框架,用于实现实时的、双向的、基于 HTTP 长连接的消息推送服务,它解决...

    shower::hamster:Gopher观察彗星:comet:淋浴:comet:和杜松子酒:clinking_glasses:on鲸鱼:spouting_whale:。 被海豚:dolphin:和大象:elephant:包围

    淋浴地鼠手表彗星淋浴和鲸鱼杜松子酒。 被海豚和大象包围。...用法环保export COMET_DATABASE_URL=root:123456@tcp(127.0.0.1:3306)/test $ Env: COMET_DATABASE_URL = " root:123456@tcp(127.0.0.1:3306)/test " ;

    彗星::comet:Comets:Swift中的动画粒子

    :comet: 彗星:Swift中的动画粒子 动画制作由作为Voicy设计的一部分 实现Bennet van der Linden 彗星:Swift中的动画粒子 例 // Customize your comet let width = view. bounds . width let height = view. ...

    问题跟踪:Comet ML的问题,帮助和问题

    Comet ML 是一个强大的实验管理和版本控制工具,尤其在机器学习(Machine Learning)领域中,它为数据科学家和研究人员提供了一种高效的方式来记录、比较和优化他们的模型。在这个"问题跟踪:Comet ML的问题,帮助和...

    Hello-flutter:你好,我的第一个 Flutter :comet:

    :comet: :comet: 入门 该项目是 Flutter 应用程序的起点。 如果这是您的第一个 Flutter 项目,请提供一些帮助您入门的资源: 如需有关 Flutter 入门的帮助,请查看我们的,其中提供了教程、示例、移动开发指南和...

    cometjs:Comet,开始你的 Meteor 开发吧!

    彗星.js Comet.js,帮助您使用 Meteor.js 进行开发,创建我们所理解的应该是 Meteor.js 自己识别的目录结构和文件。 遵循以下组织: ├── client │ ├── helpers │ ├── i18n │ ├── stylesheets │ └─...

    graphpack::comet_selector:简约的零配置GraphQL服务器

    :comet_selector: 简约的零配置GraphQL服务器在CodeSandbox上查看演示: ://codesandbox.io/s/k3qrkl8qlv包含什么? Graphpack允许您使用零配置创建GraphQL服务器。 它在使用带有和 ,因此我们可以立即使用Live ...

    effector-reeffect:效应器:comet:的并发效果

    :comet: 像常规效果一样,但效果更好:) 支持不同的启动策略:TAKE_FIRST,TAKE_LAST,TAKE_EVERY,QUEUE,RACE 处理承诺取消 可以处理逻辑取消 目录 特性 选项 消除 轴距 拿来 ky 要求 XMLHttpRequest 常问...

    ApophisiOS::comet:ApophisiOS部分运行~~~~

    你提前去世,阿波菲斯 :wilted_flower: SOPT第27届虚拟黑客马拉松:APPJAM团队Apophis 项目期限:2020.12.27〜2021.01.15 :comet: 你的早逝要提前面对“我们通过新的死亡视角审视过去的生活,回顾过去,并通过死亡来...

    Tkinter-Designer:通过拖放创建漂亮的 Tkinter GUI :comet:

    :comet: Tkinter 设计器的优势 拖放界面 比手动创建代码快得多 能够创建更漂亮的界面 :butterfly: 支持 Tkinter 设计师 没有咖啡的生活就像没有东西一样……对不起,我还没有喝过咖啡。 :high_voltage: 安装和...

    状态管理器:comet:

    :comet: effector 状态管理器 目录 介绍 Effector 遵循五个基本原则: 安装 文档 包 文章 社区 在线游乐场 DevTools 示例 使用 React 递增/递减 Hello world 事件和 nodejs 存储和事件 更多示例 API 事件效果存储 ...

    comet4j开发指南

    Comet4J开发指南 Comet4J是一个专为Java平台设计的服务器推送技术框架,它充分利用了AJAX(XMLHttpRequest)技术,实现了一种高效、实时的双向通信机制。在传统的HTTP协议中,服务器与客户端的交互是基于请求-响应...

    Temporal::comet:Temporal是一个易于使用的企业级接口,可用于分布式和分散式存储

    有关更多信息,颞 :comet: · ····多语言关于时态Temporal是一种企业级存储解决方案,使您可以轻松地与IPFS等分布式存储技术集成,而不会利用易于使用的API牺牲功能性,从而充分利用了分布式Web所提供的所有...

    awesome:精选的:comet_selector:Effector资源精选清单

    很棒的效应器 :comet_selector: 是React状态管理器。 精选的效果器视频,文章和软件包的精选列表。 找到了很棒的东西? 请! 内容 文章 从头开始编写微小的效应器 社区 例子 -React +效果器示例应用程序。 -...

    Comet4j demo

    Comet4j demo是展示如何使用Comet4j框架构建实时通信应用的一个实例,尤其是用于实现聊天功能。 在Web开发中,传统的Ajax技术存在效率问题,因为客户端需要不断地发送请求来检查服务器是否有新的数据。这不仅消耗了...

    effector-storage:Effector:comet:的模块,用于将存储与`localStorage`(或`sessionStorage`)同步

    效应子存储 小模块 :comet: 以便将存储与不同的存储(本地存储,会话存储,异步存储,IndexedDB,Cookie,服务器端存储等)进行同步。目录选项退货进阶用法存储适配器同步存储适配器示例异步存储适配器示例带有外部...

    消息推送comet4jjar包

    标题中的“消息推送comet4jjar包”指的是一个用于实现服务器向客户端实时推送消息的框架,主要针对的是IE8及以上的浏览器。Comet4j是这个框架的名称,它是一个基于Java技术构建的长连接通信框架,适用于需要双向通信...

    npm-chars-in-string::ringed_planet: 提供测试给定字符串中是否存在字符数组的方法。 :comet:

    :comet: 应用程序接口 enum是公开可用的,用于设置搜索的位置,请参见下文。 :backhand_index_pointing_down: enum Position = { Any , Start , End } 它允许您定义匹配发生的位置,在String的开头,末尾或...

Global site tag (gtag.js) - Google Analytics