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