`
lz726
  • 浏览: 335161 次
  • 性别: Icon_minigender_2
  • 来自: 福建,福州
社区版块
存档分类
最新评论
阅读更多
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浏览器扩展就是这样的解决方案,但它不与Internet Explorer等其它的浏览器相兼容。

技术:

与在Web Server与浏览器之间的一般数据传输不同,使用Comet完成到Server的连接需要特定的结构。Client端应用必须在异步初始化到Server的连接时保持工作。在Server端,即使不能马上对请求做出回应,连接也要保持直到所期待的事件发生。当事件发生时,server通过之前已经建立的连接把产生的数据推送到client。

连接在此后可能被切断,或者当存在并发事件时可以被保持下去。如果存在并发的多个事件,Server可在此连接上发送事件数据而无须client每次都明确地发送请求。

可测量性和可靠性:

这里存在一些潜在的概念:认为一个实现了Comet的Web Server具有很好可测量性。因为连接被保持直到事件发生,所以如果事件不频繁地发生,它能应付一定的连接。但如果不同的连接等待不同的事件,那么这个问题将更糟。管理这样大量连接引发了可观的系统负载。但是Server和其它支持应用正在被开发来更好的支持这样的长连接。

AJAX/Comet Request Router是一种机制:提供可测量的Server端(支持低延迟异步和双向的Comet应用)。它被用作针对任何web或者应用Server的前端,用于部署client请求到某个匹配的Server,这个Server可能是一个特定的程序或者一个针对相应的请求而执行特定应用代码的、通用的Server。Java JettyApache 2.2提供在使用异步网络操作情况下的内在的支持,它可以减少连接管理上的overhead。这样的话,Web Server逻辑仅在事件发生时发送消息给用户。由于多数操作系统都具有事件驱动I/O子系统,所以这不成问题。

防火墙和HTTP代理在浏览器和Web Server之间能够造成进一步的网络问题。防火墙常常被配置为丢弃超长时间的连接,因此一些商业品质的框架被迫拆卸、重建周期性的“push”连接。而HTTP代理可能缓冲32Kb或者64Kb的推送信息,无奈之下用来适配检测代理缓冲区大小的系统称为了必要之物。

浏览器造成了进一步的限制:HTTP1.1规范的8.1.4章节说明:“一个单独用户的client不应该对同一Server或者代理服务器维护两个以上的连接”,这被大多数常见的浏览器(包括Internet Explore盒Firefox)作为推荐。保有一个为HTTP流而打开的连接之做法对于AJAX应用来言是建立了一个性能问题,这样就没有能力在一系列图片被装载时启动一个新的用户发起的数据请求。这个问题常被这样绕过:在推送连接时建立不同的主机名(虽然是同一个物理主机)。在集群Server环境下,信息需要被路由到当前正连接到指定client的Web Server上,有保证的传送需要在Web Server宕机事件发生时被确认。这由典型的管理面向中间件系统(常常被JMS封装)处理。

分享到:
评论

相关推荐

    comet4j 所需js以及comet4j-tomcat6.jar、comet4j-tomcat7.jar包

    综上所述,这个压缩包包含的`comet4j.js`、`comet4j-tomcat6.jar`和`comet4j-tomcat7.jar`是实现基于Java的Comet4j实时通信框架的关键组件。它们分别负责客户端的JavaScript交互、在Tomcat服务器上的集成和支持,为...

    comet demo 向客户端推送例子

    这个"comet demo"是一个展示如何在Java环境下利用Tomcat服务器实现Comet技术的实例。Tomcat 6.0是Apache软件基金会开发的开源Servlet容器,支持各种Java Web应用的部署,包括Comet技术。 首先,Comet的核心在于保持...

    catalina-comet.jar

    【Catalina-Comet.jar】是Apache Tomcat服务器中用于支持Comet技术的一个关键组件。Comet是一种在Web开发中实现服务器推送技术的方法,它允许服务器主动向客户端发送数据,而不仅仅是响应客户端的请求。这种技术对于...

    CSharp HTTP长连接(Comet)

    在提供的`Comet.Test`文件中,可能包含一个用于测试Comet实现的WinForm应用程序。你可以运行此程序,观察客户端如何与服务器保持连接并接收数据。使用调试工具如Visual Studio,可以跟踪代码执行,检查HTTP请求和...

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

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

    Python库 | comet_ml-2.0.12.tar.gz

    《Python库Comet_ml-2.0.12:跟踪、优化与实验管理》 在IT行业中,Python作为一门强大的开发语言,拥有丰富的库支持,其中Comet_ml就是一款专为机器学习和深度学习项目提供实验跟踪、模型优化以及协作功能的库。...

    comet套件(comet4j-tomcat6/7.jar、comet4j.js)

    Comet4J是一款针对Java平台的长连接技术框架,它主要设计用于实现高效的服务器推送技术。在Web开发中,服务器通常使用HTTP协议与客户端进行通信,而HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器返回...

    comet框架例子项目

    在本"Comet框架例子项目"中,我们可以深入理解并学习如何利用Comet技术构建实时通信的应用。 Comet的核心理念是通过长时间保持一个HTTP连接来实现服务器到客户端的数据推送,而不是每次有新数据时都创建新的连接。...

    comet4j实例

    Comet4j是一个Java库,专门用于实现Comet技术,这是一种服务器推送技术,允许服务器向客户端实时推送数据,而不仅仅是响应客户端的请求。在Web应用中,这种技术常用于实现聊天室、股票报价、在线游戏等实时交互功能...

    comet4j.jar

    Comet4j是一个Java库,专门用于实现Comet技术,这是一种服务器向客户端推送数据的Web应用程序设计模式。Comet技术打破了传统的HTTP请求-响应模型,允许服务器在客户端保持持久连接,从而实现实时数据更新。这在需要...

    web推送 comet技术

    在MyEclipse集成开发环境中,你可以创建一个新的Web项目,导入`comet4j`库,然后按照Comet4J的API和文档编写服务器端的推送逻辑。客户端通常需要JavaScript来接收并处理服务器推送的数据,这可能涉及到AJAX或者...

    Servlet3.0 异步处理 页面推送 Comet 实例

    本实例主要关注的是如何利用Servlet3.0的异步处理来实现页面推送技术——Comet。 Comet是一种Web应用程序架构,用于创建持久连接,允许服务器向客户端(通常是浏览器)实时推送数据。在传统的HTTP协议中,服务器...

    comet4j-tomcat6.jar和comet4j-tomcat7.jar和comet4j.js

    标题中的"comet4j-tomcat6.jar"和"comet4j-tomcat7.jar"是针对Tomcat 6和7版本的特定兼容库。这两个JAR文件包含了Comet4j的核心组件,使得开发者能够在这些版本的Tomcat上部署和运行支持Comet的Web应用程序。它们...

    C#Web即时通讯Comet框架

    **C# Web即时通讯Comet框架详解** 在Web开发中,传统的HTTP协议是基于请求-响应模型的,这种模式在处理实时性需求时显得力不从心,因为服务器只有在接收到客户端的请求后才会返回数据。为了实现Web即时通讯(Web ...

    Java 实现 Comet 长连接,服务器主动发送消息给客户端

    Java 实现 Comet 长连接,服务器主动发送消息给客户端是一项关键的技术,它在实时通信、推送服务等领域有着广泛的应用。Comet 是一种基于 HTTP 的持久化连接技术,允许服务器在客户端保持一个打开的 HTTP 连接,直到...

    comet4j完整包

    【标题】"comet4j完整包"是一个与Web服务端推送技术相关的软件包,它包含了一系列用于实现实时通信的组件和库。这个包旨在帮助开发者构建基于Comet技术的应用,以提供高效的、双向的服务器到客户端的数据传输。 ...

    asp.net comet例子

    ASP.NET Comet是一个技术概念,它涉及到了Web应用程序中的实时通信,特别是服务器向客户端推送数据的能力。在传统的HTTP协议中,服务器通常在客户端发起请求时才响应,而在Comet模式下,服务器可以保持一个连接开放...

    comet4j-tomcat6,comet4j-tomcat7,comet4j.js,以及一个样例

    首先,我们来了解`comet4j-tomcat6`和`comet4j-tomcat7`。这两个版本的库分别针对Tomcat 6和Tomcat 7进行优化,因为Comet4J的兼容性和性能可能会随着Tomcat版本的不同而变化。它们包含了必要的类和配置文件,使得在...

    comet4j-tomcat7.jar comet4j.js

    Comet4J是一个针对Java平台的服务器推送框架,它的核心理念是利用Ajax(XMLHttpRequest)技术来实现服务器向客户端的实时数据推送。在传统的HTTP协议中,服务器与客户端的通信通常依赖于客户端发起请求,而服务器...

    comet4j完整资源

    Comet4j是一个Java库,专门用于实现Comet技术,这是一种服务器向客户端推送实时数据的Web应用程序设计模式。Comet技术通常用于构建实时交互的应用,如聊天应用、股票报价、在线游戏等,它克服了传统的HTTP请求-响应...

Global site tag (gtag.js) - Google Analytics