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

 

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

 

 

 

 

你可能感兴趣的:(tomcat,jsp,servlet,IE,Comet)