这二种方式分别具有一下优缺点:
1.客户端定时访问:
- 缺点:效率比较低,频繁的访问服务端消耗服务端资源。在权限系统中可能造成权限不能过期问题(timeout)。
- 优点:服务端处理比较简单。
2.服务端定时推送:
- 缺点:服务端处理程序比较复杂,需要掌握一定的线程知识。可能还需要应用服务器支持。
- 优点:效率较高。
第一种实现方式,网上有非常多的实现并且其固有的缺点所以没有实现。这里只实现了服务端推送方式,工程在附件中。
工程中实现了二种方法推送进度:
1.通过Tomcat comet 实现( http://tomcat.apache.org/tomcat-6.0-doc/aio.html)。
- 缺点:只能绑定tomcat 6.0以上版本,需要对服务器进行配置,使用正确的协议(如:org.apache.coyote.http11.Http11NioProtocol等)。
- 优点:客户端开发比较简单,不需要太多学习。
2.通过pushlet实现 http://www.pushlets.com。
- 缺点:需要学习了解pushlet的使用。
- 优点:适合主流web服务器,一旦学会使用还是比较简单。
我认为如果功能简单又使用Tomcat 6.0以上服务器,可以采用Tomcat comet。如果应用比较复杂最好采用pushlet,可能为了适合应用你可能需要扩展它,好在pushlet不算复杂,一般看看资料和源代码就会明白其原理,也就不难对其进行扩展。因为推送机制主要在后台完成,所以后台代码比较复杂,如果你不太了解线程最好先学习一下。
具体实现参考附件中的工程。开发IDE是Eclipse。如有疑问可以邮件[email protected]共同探讨。
注意使用Tomcat comet 实现需要修改协议为protocol="org.apache.coyote.http11.Http11NioProtocol"。