Servlet3.0实战:异步Servlet与Comet作派的应用程序
Servlet3.0实战:异步Servlet与Comet风格的应用程序接着,建立一个支持异步的 Servlet,目的是每个访问这个 S
Servlet3.0实战:异步Servlet与Comet风格的应用程序
接着,建立一个支持异步的 Servlet,目的是每个访问这个 Servlet 的客户端,都在 ASYNC_CONTEXT_QUEUE 中注册一个异步上下文对象,这样当有 Logger 信息发生时,就会输出到这些客户端。同时,将建立一个针对这个异步上下文对象的监听器,当产生超时、错误等事件时,将此上下文从队列中移除。
清单 4:Web 日志注册 Servlet
服务端处理到此为止差不多就结束了,我们再看看客户端的实现。其实客户端我们直接访问这个 Servlet 就可以看到浏览器不断的有日志输出,并且这个页面的滚动条会一直持续,显示 http 连接并没有关闭。为了显示,我们还是对客户端进行了包装,通过一个隐藏的 frame 去读取 WebLogServlet 发出的信息,既 Comet 流方式实现。
清单 5:客户端页面
清单 6:客户端引用的 application.js
?
结束语
Comet 的出现为 Web 交互带来了全新的体验,而 Servlet 3.0 和异步 IO 则为 Comet 实现过程中服务端 Web 线程占用的问题提供了规范的解决方案。随着各种支持 Servlet 3.0 容器的出现,Comet 的应用将越来越频繁,目前开发 Comet 应用还是具有一定的挑战性,但随着需求推动技术的发展,相信 Comet 的应用会变得和 AJAX 一样普及。
关于作者
周志明,软件工程硕士,就职于远光软件股份有限公司,担任平台架构师,参与过中国国家电网 SG186 工程等大型 ERP 项目的平台架构工作。目前主要技术方向为企业级平台、工作流、SOA、OSGi 等。
?
源码下载:http://www.java3z.com/cwbwebhome/dir1/dir8/AsyncServlet.zip