`

Tomcat 开发Comet实例

阅读更多

1.Tomcat6&Comet的简要介绍

 

Comet技术的悄然流行,Jetty在比较早地支持了Comet,提供了Comet 的Servlet,同样从Tomcat6开始,Comet已经在Tomcat的标准Servlet中开始支持了,这是个好事情,毕竟我们有越来越多的选择了。

 

可喜的是Comet技术,已经定义在Servlet3.0规范中,到时候,我们代码的移植性更好了。

 

可惜的是Tomcat提供了几个Sample都不能运行,在这里需要批评一下Tomcat的开发者们了,笔者花了几天看了那个实例代码,代码写得确实有点问题,大量的同步关键字,本身其实用一个简单的例子说明就可以了,何必杀鸡用牛刀。

 

Tomcat的comet原理其实同样很简单,它无非就是做了一件事情,它允许servlet执行完毕后的response没有被回收,我们只要拿到这个Reponse的引用并保存起来,就可以随时从Server向Client端Push数据了。

 

Tomcat提供了CometProcessor接口,有这种特定标记的Servlet,Tomcat会做特殊处理,Tomcat不会把它当做普通Servlet实行完毕后,会回收request和response。


2.实战

 

本文实现了一个server 定时push一个随机数到client端,此例查询了大量的实例,经过笔者验证,在IE和FireFox下都可以运行。

 

运行此例,需要下面配置:

 

1) Tomcat要求支持Comet,必须使用NIO或者APR的方式,因此,修改Tomcat/conf/server.xml

    <Connector port="9000" executor="tomcatThreadPool"  protocol="org.apache.coyote.http11.Http11NioProtocol" 
               connectionTimeout="20000"  maxThreads="150"
               redirectPort="8443"  maxKeepAliveRequests="1"/>

 

2)Tomcat版本要求6.0.16以上,最好使用最新的版本

 

3) 修改附件中源码里面的web目录下的comet-compatible.jsp文件,把里面涉及IP和端口的url,改成你机器的ip地址和端口

 

4) 测试运行:http://ip:port/contextName/comet-compatible.jsp

 

请耐心等数秒钟,随机数开始从server push到client端了

 

 

源码见附件,附件的URL如下:

 

http://dl.iteye.com/topics/download/ee28df9d-d838-3572-be73-dbf06c11080f

 

注:作者本着负责的态度,让大家更快的学习新东西,欢迎大家有问题,给我留言,我一定及时回复

 

 

 

 

分享到:
评论
17 楼 tieganxiaosheng 2014-08-14  
非常感谢楼主!怎样在数据更新完毕后关闭这个连接呢?
16 楼 tankerxp 2013-08-12  
是不是 部署在eclipse上的tomcat wtp方式的 就不能运行
15 楼 xsgkaka 2013-01-05  
debbykindom 写道
本人已经测试过,附件代码基本没有问题,就是有几点要注意。
1.修改comet-compatible.jsp中的ip地址,如改为127.0.0.1,端口9000不用改。
2.contextPath需设置为“cs”。
3.访问时使用http://127.0.0.1:8080/cs/..的形式,不要使用
http://localhost:8080/cs/..的形式。
但测试时发现有一个问题,首次访问comet-compatible.jsp时一切正常,数据能正常更新,控制台输出亦无异常;然而一旦刷新该页面则会出现NullPointerException,然后页面无数据显示。


我也是页面一刷新服务端就会报错
14 楼 kangguolong 2012-02-19  
到底是个什么个流程??
访问comet-compatible.jsp只是在后台输出
org.apache.catalina.connector.ResponseFacade@c9d92c buffer size=====8192
访问另外的两个页面然后单击GO按钮也只是后台不停的输出天气消息,前台没有任何的输出????????????????
13 楼 kangguolong 2012-02-19  
我的也是在后台不停的输出org.apache.catalina.connector.ResponseFacade@383118 buffer size=====8192
而已,前台界面什么也没有。
12 楼 luckyzhw 2012-02-17  
使用的是Tomcat 7,在Firefox里面,执行go,看到后台有打印:
org.apache.catalina.connector.ResponseFacade@383118 buffer size=====8192
org.apache.catalina.connector.ResponseFacade@383118 buffer size=====8192

但是在Firefox里面没有看到任何反应,不过通过Firebug,可以看到不断有reponse收到反应消息。不知何故,在firefox的页面就是看不到内容。

Chrome也是一样。

IE也是一样,怪哉。
11 楼 joe_zhjiang 2011-11-04  
我也跑过代码,但ajax还是重复访问后台。求解答,因为event.getEventType()状态会变成error.
10 楼 wzxf536 2010-12-29  
博主,我现在android系统上需要用到这个东西,希望能交流下,看见回我Email:wzxf536#163.com #改成@就可以了,谢谢~
9 楼 yicw 2010-12-12  
这个例子在IE下跑不起来,把comet-compatible.jsp中第30行改成:
comet.connection.write("<script>document.domain = '"+document.domain+"'");
就可以了。
8 楼 yangcaifeng_14 2010-09-16  
yangcaifeng_14 写道
我引用了如下包,可以跑起来了
catalina-6.0.20.jar
jdom.jar
org.apache.felix.http.bundle-2.0.2.jar
rome-1.0RC2.jar
servlet-api.jar


AsyncContext async = request.startAsync(request, response)没起作用
7 楼 yangcaifeng_14 2010-09-16  
我引用了如下包,可以跑起来了
catalina-6.0.20.jar
jdom.jar
org.apache.felix.http.bundle-2.0.2.jar
rome-1.0RC2.jar
servlet-api.jar
6 楼 yangcaifeng_14 2010-09-16  
debbykindom 写道
本人已经测试过,附件代码基本没有问题,就是有几点要注意。
1.修改comet-compatible.jsp中的ip地址,如改为127.0.0.1,端口9000不用改。
2.contextPath需设置为“cs”。
3.访问时使用http://127.0.0.1:8080/cs/..的形式,不要使用
http://localhost:8080/cs/..的形式。
但测试时发现有一个问题,首次访问comet-compatible.jsp时一切正常,数据能正常更新,控制台输出亦无异常;然而一旦刷新该页面则会出现NullPointerException,然后页面无数据显示。

去掉jsp-api.jar可以解决空指针异常
5 楼 anyonefeng 2010-07-05  
楼主你这个我怎么始终运气不起啊    能不能把你这个项目的源代码发给我谢谢anyonefeng@gmail.com
4 楼 debbykindom 2010-06-21  
本人已经测试过,附件代码基本没有问题,就是有几点要注意。
1.修改comet-compatible.jsp中的ip地址,如改为127.0.0.1,端口9000不用改。
2.contextPath需设置为“cs”。
3.访问时使用http://127.0.0.1:8080/cs/..的形式,不要使用
http://localhost:8080/cs/..的形式。
但测试时发现有一个问题,首次访问comet-compatible.jsp时一切正常,数据能正常更新,控制台输出亦无异常;然而一旦刷新该页面则会出现NullPointerException,然后页面无数据显示。
3 楼 matychen 2010-06-11  
建议楼主整个能编译的,没错误的附件上来,你这样的附件确实比较闹心。。。
2 楼 tomyz0223 2010-06-06  
依赖的包,包括,tomcat 6/lib目录下的jsp-api.jar,servlet-api.jar,catalina.jar,把这三个包加到你的classpath下面,仍然会有两个类不能编译通过,其实关系不大,因为我在本例中运行的是CometSample这个类,你直接把能编译通过的包直接放到tomcat/webapp下面查看结果就可以了
1 楼 kevinchj 2010-06-06  
非常感谢楼主。请问得用JavaEE6的jar包吗?不然又很多class找不到,如javax.servlet.annotation.WebServlet;等。但是用了JEE6的jar包后,放问jsp页面又有错误。闹心的很,不知道对jar包对有什么要求配置,谢谢

相关推荐

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

    【标题】:“Tomcat+Comet 实现终端与服务端同步的小例子” 在这个主题中,我们将探讨如何使用Apache Tomcat服务器和Comet技术来实现浏览器客户端与服务端的实时通信。Comet是一种Web应用程序设计模式,它允许数据...

    comet demo 向客户端推送例子

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

    comet4j-tomcat7.jar和comen4j.js

    如描述中所述,`comet4j-tomcat7.jar`是专门为Tomcat6和Tomcat7设计的版本,这意味着它已经针对这两个版本的Tomcat进行了优化和适配。请注意,如果尝试在更高版本的Tomcat上运行,可能需要寻找对应的更新版本或进行...

    comet4j的jar包、js、实例

    标题中的"jar包"指的是Comet4j的可执行库文件,通常用于Java开发环境中,包含了Comet4j的核心功能和API。开发者可以将这些jar包添加到项目类路径中,以便调用Comet4j提供的服务。 描述中提到的"comet4j.js"是一个...

    Tomcat与Java Web开发技术详解源代码

    6. **WebSocket与 Comet技术**:讲解基于Tomcat的实时通信技术,如WebSocket的实现,以及Comet的原理和应用。 7. **Tomcat集群与负载均衡**:讨论如何通过Tomcat实现应用的集群部署,以及负载均衡策略的配置。 8. ...

    comet4j 简单例子+文档

    - 创建Comet服务:在服务器端,你需要创建一个Comet服务实例,设置监听端口和处理逻辑。 - 注册事件处理器:定义事件处理器类,处理来自服务器的数据推送事件。 - 客户端连接:在客户端,通过JavaScript或者Ajax...

    Tomcat9.0服务器

    Tomcat9.0作为其最新的稳定版本,提供了许多增强功能和性能优化,使其在中小型企业和开发环境中广泛应用。 首先,让我们深入了解Tomcat服务器的核心组件和工作原理: 1. **Catalina**:这是Tomcat的主要部分,负责...

    comet4j使用方法

    1. **下载服务端JAR文件**:Comet4j目前只支持Tomcat 6和7,根据你的Tomcat版本,下载对应的`comet4j-tomcat6.jar`或`comet4j-tomcat7.jar`,将其放入`WEB-INF\lib`目录。 2. **修改服务器配置**:由于Comet4J工作...

    Comet4J可运行样例,web页面刷新框架

    - **示例应用**:展示如何使用Comet4J的简单Web应用实例,包括HTML、CSS和JavaScript文件,帮助开发者快速理解和上手。 - **文档**:可能包括用户指南、API文档和示例说明,详细解释了如何配置和使用Comet4J框架。 -...

    comet4j的示范项目Demo

    总的来说,`comet4j`为开发实时Web应用提供了一个高效且易用的解决方案,通过掌握这一技术,你可以在构建高交互性的Web应用时更加游刃有余。在实际项目中,结合其他前端框架如Ajax、WebSocket等,可以构建出更加复杂...

    apache-tomcat-5.5.31

    它还支持JMX(Java Management Extensions),允许通过JMX管理工具远程监控和管理Tomcat实例。 总的来说,Apache Tomcat 5.5.31是Java Web开发的重要组成部分,虽然现在有更新的版本,但其稳定性和广泛的社区支持...

    Comet4j demo

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

    消息推送实例commet4j

    1. **配置Servlet容器**:确保Servlet容器(如Tomcat)支持长连接,可能需要调整某些配置参数以适应Comet4j的运行需求。 2. **引入依赖**:将Comet4j的JAR包添加到项目的类路径中,如果是Maven项目,可以通过在pom....

    webSocket应用实例

    在给定的例子中,我们可以推测这是一个使用Eclipse开发的WebSocket应用实例,它依赖于Tomcat 7.0以上版本的服务器和Java 7.0以上的JDK运行环境。Eclipse是一个广泛使用的Java集成开发环境,适合开发各种Java应用程序...

    服务推实例

    【服务推实例】是关于Java Web应用程序中实现服务器推送(Server-Sent Events, SSE)或Comet技术的一个示例。这个例子旨在展示如何在Web页面和Java后台之间实现实时通信,让服务器能够主动向客户端推送数据,而不...

    comet_jquery

    项目的描述中提到,它已经在Tomcat服务器上进行了配置,并且包括了所有必要的jar包,这意味着开发者可以直接下载并运行,无需额外寻找依赖。这使得部署和测试过程更为便捷。此外,项目经过了实际运行的验证,确保了...

    一个基于pushlet推送的小例子

    总结来说,"一个基于pushlet推送的小例子"是一个展示如何在Tomcat服务器上利用Pushlet框架实现Comet技术的实例。通过这个例子,开发者可以学习到如何构建和部署一个能够进行服务器端数据推送的Web应用,这对于需要...

Global site tag (gtag.js) - Google Analytics