Grizzly实现仿Twitter异步读写应用

在JDK 1.4之前,Java的阻塞式网络IO接口在处理大量用户请求时,常会由于网络阻塞而引起处理线程终止。如果为每个用户分配单独的处理线程,在应对大规模请求时,则会在Java线程资源分配和线程调度方面占用巨大的开销,如使用多Java虚拟机或多服务器集群来满足大并发请求,则会为系统架构带来成本上的增长。

在JDK 1.4后续版本中,通过增加New IO特性,能够让应用服务器以非阻塞方式处理网络请求,在处理大量并发请求时不必耗费大量线程。

Grizzly是GlassFish的子项目,Grizzly在NIO技术的基础上,通过异步请求服务实现应用服务器中高性能的Java HTTP引擎,并且屏蔽NIO编程模型的复杂性。同时,Grizzly也可以独立于GlassFish作为单独框架来扩展和构建服务器应用。除了GlassFish本身,目前有为数不少的服务器应用都在使用Grizzly处理HTTP请求,包括 Jetty、Alaska、Tango、Jruby on Grizzly等应用。

始于2004年的Grizzly项目,在目前最新的2.0.0 Milestone版本中,已在http-servlet模块中包含Servlet部署工具,并完全支持HttpService OSGi特性。为了展示Grizzly的服务器推送技术(别名”Comet”彗星),开发者Arcand使用了约150行Java代码,在Grizzly Comet框架的帮助下,实现了一个模拟Twitter的应用,以展示借助Grizzly实现功能强大的无阻塞异步读写应用示例。

整个应用仅用一个Servlet实现,首先需要创建CometEngine类的对象,这是框架的入口点;其次要创建 CometContext对象,以此来处理等待队列中的连接;在程序中还需要定义CometHandler来允许Web应用处理排队连接的生命周期。感兴趣的开发者可以下载打包好的Twitter应用,来亲身体验基于Grizzly实现的仿Twitter异步读写应用实例。

留下评论