0 0

Comet为什么使用CometProcessor接口的event函数5

Comet为什么使用CometProcessor接口的event函数,如果不用CometProcessor,直接用HttpServlet,在doGet或者doPost方法中对一个守候线程进行操作,不是一样么?
2012年10月26日 11:13

1个答案 按时间排序 按投票排序

0 0

采纳的答案

Comet有多种实现方式,你说的方法只是其中的一种实现方法。也就是直接在HttpServlet的doGet或者doPost方法中将response进行阻塞(不返回),直到有消息需要发送的时候再返回,客户端收到结果后再一次请求一个连接过来,周而复始。这种方式基于阻塞式IO,每个连接都要占用一个处理线程,当连结数较多时,WEB服务器的吞吐量就成了一个瓶颈,因为处理线程池的最大数量是有限制的,当线程数达到一定数量后,CPU用于线程调度的时间增多,整体的处理速度会下降。而且这种方式只要有消息需要推送给客户端,本次连接就结束了,之后客户端还要再进行一次新的连接。所以对于小型应用可以使用,但是并发连接数较多的大型应用就会遇到瓶颈。这时就要考虑采用下面这种方式了。


CometProcessor接口的event函数属于另外一种实现方式,这种实现方式基于NIO(非阻塞式IO),采用事件响应的处理方式。在WEB服务器内部会维护一个线程队列,这个队列可以存放足够多的连接以及对应的事件监听信息,监听相当于客户端和servlet之间的一个桥梁,它监听客户端的事件,必要的时候把事件转给servlet,同时它也监听servlet端的事件,必要的时候,它把servlet返回的信息返回给客户端。而且当response给客户端信息结束以后,并不断开连接,而是继续保持连接,所以通过一个连接客户端和servlet之间可以多次传递数据,直到timeout(这个timeout时间可以设置得足够长)或者servlet主动关闭连接,这个连接才会断开。这种方式在不改变处理线程池的最大线程数的前提下,采用队列缓存大量请求,来提高web服务器的吞吐量。同时采用java的nio,使长连接成为可能,服务端可以高效实时地进行消息推送。

这两种方式的区别就在于阻塞式IO和非阻塞式IO。两者都是基于JAVA本身对阻塞式IO和非阻塞式IO的支持。没有JAVA的NIO库的支持,就谈不上基于事件响应的comet的实现。

对于tomcat而言,上面的这两种方式都支持,具体配置及细节可以参考下面的文章。

http://blogzhoubo.iteye.com/admin/blogs/1709212

2012年10月31日 14:33

相关推荐

    comet4j使用方法

    Comet4J 是一个专为Java开发者设计的Comet技术框架,它允许服务器与客户端进行实时的双向通信,实现持久连接。Comet技术是解决Web应用程序实时性问题的一种方法,通过长时间保持HTTP连接来实现实时数据推送。下面将...

    catalina-comet.jar

    1. ** CometProcessor接口**:这是在Tomcat中实现Comet处理的核心接口。开发者需要自定义这个接口的实现来处理来自服务器的推送事件。当一个HTTP连接被设置为Comet模式时,Tomcat会调用这个接口的方法来处理服务器端...

    comet4j一整套官方出品前后端jar包,js,Demo包

    Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。 功能特性 推送消息广播。 推送定向消息。 提供连接上线前、上线、...

    comet4j.js+comet4j-tomcat7jar包资源

    - 创建一个Servlet或Filter,实现Comet4J的相关接口,如`CometProcessor`,用于处理客户端的连接和数据推送。 - 在处理请求时,使用Comet4J提供的API来建立持久化的HTTP连接,并在适当的时候向连接推送数据。 3. ...

    Tomcat 开发Comet实例

    Tomcat 5.5以上版本内置了对Comet的支持,通过使用`AsyncContext`和` CometProcessor`接口。`AsyncContext`允许在Servlet处理程序中异步处理请求,而`CometProcessor`则为处理长时间运行的请求提供了回调方法。 接...

    comet4j.jar

    1. **核心库**:`comet4j.jar`本身是Comet4j的核心库,封装了处理持久连接、数据推送等功能的类和接口。开发者可以通过这个库在自己的应用中集成Comet4j。 2. **Tomcat适配器**:提到的"tomcat6"和"tomcat7"可能指...

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

    这个文件提供了与服务器端Comet4j服务交互的接口,允许网页通过JavaScript代码订阅和接收来自服务器的实时消息。在网页应用中,开发者可以将这个脚本引入到HTML页面中,然后调用其提供的API进行事件注册、连接建立、...

    java comet服务器推送使用步骤

    ### Java Comet 服务器推送使用步骤详解 #### 一、引言 在现代Web开发中,实时数据推送技术已经成为不可或缺的一部分。Comet作为一种实现服务器向客户端推送数据的技术方案,在早期的Web应用中扮演了重要的角色。...

    java 使用 comet4j 主动向客户端推送信息 简单例子

    综上所述,Java 使用 Comet4j 实现主动向客户端推送信息是通过建立长连接,利用 Comet4j 框架提供的接口和方法来实现实时通信。这个技术在实时聊天、股票行情、在线游戏等需要实时更新信息的场景中有着广泛的应用。

    C#Web即时通讯Comet框架

    Comet技术为Web即时通讯提供了一个有效的解决方案,通过C#的Comet框架,开发者可以更轻松地实现服务器到客户端的数据推送。自定义扩展功能进一步增强了框架的灵活性,使其能适应各种复杂的业务需求。结合提供的...

    pushlet 和comet 资料介绍

    在服务器端,Pushlet使用`EventSource`和`EventSourceManager`来管理和处理事件,`EventSource`实现了`Runnable`接口,可以在多线程环境中运行,确保服务器能够并发地处理多个客户端的请求。 总的来说,Pushlet和...

    comet demo 向客户端推送例子

    4. 在服务器端编写逻辑,当有新的消息需要推送时,调用相关接口,将消息推送到客户端。 值得注意的是,Comet虽然提供了实时性,但也有一些缺点,比如连接管理的复杂性、服务器资源占用较高、可能导致浏览器兼容性...

    comet4j使用demo,可以直接运行

    comet4j使用demo,可以直接运行, 使用之前请先修改tomcat里的server.xml里的配置, 具体请参照http://blog.csdn.net/majian_1987/article/details/8489661 这是我写的一个demo,使用的时候, 先打开helloworld.html...

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

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

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

    样例文件通常包含了一个简单的示例应用,演示了如何在实际项目中使用Comet4J。这可能包括Java后端代码、HTML页面、JavaScript代码以及相关的配置文件。通过分析这个样例,开发者可以快速理解Comet4J的工作原理,并将...

    tomcat+comet实现终端与服务端同步的小例子

    Tomcat自版本5.5开始支持Comet,通过`org.apache.catalina.connector.CometProcessor`接口实现。开发者需要编写自定义处理器来处理长时间运行的HTTP请求,处理数据推送和断开连接。 **四、实例解析** 在...

    comet4j的示范项目Demo

    本示范项目`Demo`包含了如何使用`comet4j`的基本步骤和示例代码,旨在帮助开发者快速理解和实践Comet技术。以下是对`comet4j`使用的一些关键点: 1. **安装与配置**:首先,你需要将`comet4j`的库文件添加到你的...

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

    1. `comet4j-tomcat6.jar` 和 `comet4j-tomcat7.jar`:这两个JAR文件是Comet4J为Tomcat 6和Tomcat 7优化的版本,它们提供了与Tomcat容器集成的能力,允许开发者在Tomcat环境下使用Comet4J实现服务器推送功能。...

    comet4j-js

    开发者需要创建一个Servlet或者使用Comet4j提供的API来处理来自客户端的连接,并在有新数据时推送到客户端。 3. **客户端集成**:在HTML页面中引入`<script src="comet4j.js"></script>`,然后使用JavaScript API...

    comet4j实例

    在这个"comet4j实例"中,我们将会探讨如何使用Comet4j来创建一个可运行的示例应用。这个压缩包`comet4jDemo`可能包含了以下组成部分: 1. **源代码**:通常包括Java类,这些类定义了服务器端的Comet处理逻辑以及...

Global site tag (gtag.js) - Google Analytics