Grizzly框架已经用在很多产品中了,如GlassFish、Sailfin、RESTlet及OpenESB等等,通过采取Java新的I/O API(NIO)它使得开发者能够编写出可伸缩的服务器端应用。Grizzly的下一代——Atmosphere是一个基于POJO的框架,它的目标是将Comet带给大家。Jean-Francois向InfoQ谈到了这一新变化。
InfoQ: 你能否向我们介绍一下使用Grizzly这样的框架的好处以及通常人们使用它的方式吗?
Jean-Francois Arcand (JFA): 编写可伸缩的客户端或者服务器端应用不是一件容易的事情。使用Grizzly框架的好处就在于你可以不用考虑底层的NIO细节就能构建强大的应用。Grizzly使你能以非常简单的方式编写应用,从而加快客户/服务器应用的开发速度。Grizzly社区也很活跃,他们回答问题的速度非常快,这使得开发体验也非常好。对于任何开源项目来说,活跃的社区总是一剂催化剂,这几年下来我们不断成长并且从社区中学到了很多。
InfoQ: 在新发布的1.8版中,Grizzly框架包装了各种可以共存或者独立安装的模块。你能否简要描述一下这些模块以及当前发布的总体架构?
JFA: Grizzly模块可分成两类:第一类是NIO框架及其扩展。NIO框架可用来构建强大的服务器端应用。例如,我曾在爱立信(通过Sailfin项目)从事Grizzly框架模型上的SIP协议支持。SIP协议支持TLS、UDP及TCP作为传输层,因此唯一可行的方案就是采用Grizzly框架。另一个例子是Sun的Shared Shell产品,它也构建在Grizzly框架之上。第二类我称之为嵌入式组件,如http、jruby及comet扩展。他们能直接使用,也能以嵌入式的方式使用。一个好的例子就是GlassFish v3,它是构建在http模块之上的。我们还有一个实验性的功能不完全的Servlet容器(尚未完成),它可被用于测试目的(比如通过junit)。Jersey项目使用它完成自动化测试,到目前为止,作为一个微型的类似于Servlet容器的实验品,它的用处还是非常大的。
InfoQ: 很多开源项目都使用了Grizzly,无论在Sun内部还是外部,其中最著名的当属GlassFish应用服务器。你能否再举一些例子来说明该框架的强大?
JFA: 因为开源,所以很难说出谁在使用你的东西。我知道的有下面这些:(Sun外部)4homemedia.com、RESTlet、Jetty、Alt-mobile、Mediafed/blog-city、T-mobile、Yahoo Brazil、Bindows Ajax框架等等。(Sun内部)GlassFish、JXTA、Phobos、JavaCaps open-esb http binding、Jersey、GlassFish v3 Grail实现、 Netbeans、Sailfin、Sun Shared Shell、Sun Instant Messenger,构建在Grizzly的JRuby on Rail扩展之上的GlassFish JRuby gems。ICEFaces和DWR提供支持的用于客户端的Grizzly Comet。也许还有很多,但他们不告诉我们 :-)
InfoQ: 你怎样看待Grizzly所面对的来自Tomcat或者Jetty的竞争?
JFA: Grizzly与Tomcat/Jetty的主要区别在于后者完全支持Servlet 2.5规范,而Grizzly还没有 :-)。Grizzly的优势在于嵌入式领域。我认为一个容易定制的小型http运行很有市场。而这也是Grizzly优于Jetty/Tomcat(更小、容易扩展等等)的地方。Jetty是该领域的领导者,但是我们看到越来越多的应用从Jetty迁移到了Grizzly上。Grizzly的一个优点是其异步的请求处理机制,这可在http层进行定制。这种机制非常适合小型的异步代理。Grizzly的http扩展使你能编写基于Comet的应用而无需Servlet支持,有时我们需要这样。
InfoQ: Servlet 3.0规范(JSR 315)要为Comet提供继承支持,你怎么看待这一点?
JFA: 对,Servlet 3.0准备为Comet添加官方的API支持。他们主要在讨论挂起/继续请求的方式。
InfoQ: 你能否向我们介绍一下Atmosphere框架及其产生的驱动力吗?
JFA: 两年前我曾发表了一篇关于Grizzly Comet框架的博文,从那时起我就打造了一个关于它的社区。Grizzly Comet框架的一个缺点是它只能与Grizzly运行时和GlassFish协同工作,这是个严重的限制。很多人曾建议该框架支持其他容器,如Tomcat、Jetty以及Resin。因此,Atmosphere的目标就是吸收Grizzly Comet框架的精华(一个叫做Grizzlet的组件)并支持所有容器(无论支持Comet与否)。不必等到Servlet 3.0规范发布人们就能编写轻巧的Comet/Ajax推应用(Push application)。它还会提供Servlet 3.0规范之外的很多东西。
InfoQ: Grizzly和Atmosphere对Bayeux的发布/订阅协议的支持如何?
JFA: Bayeux实现可以构建于Atmosphere之上。但是现在,我将专注于Atmosphere本身,并打造一个关于它的社区。一旦1.0版发布,我们就会留意能否在其上应用Bayeux协议。
InfoQ: 关于Atmosphere,Grizzly有何打算呢?新框架能完全代替旧的吗?
JFA: Atmosphere仅仅是将comet从Grizzly迁移到了新项目中。最近我们将grizzly-jruby扩展迁移到了叫做GlassFish scripting的新项目中了。Atmosphere将成为一个新项目的第二个扩展。
Grizzly的主要组件、NIO框架及其http扩展仍旧保留在Grizzly下。我们现在正从事于Grizzly 2.0的开发(有新的领导,所以我能专注于Atmosphere)并且很多活动也要在其上展开了。
InfoQ: Atmosphere和Grizzly的下一个版本发布的时间表是怎样的?
JFA: Grizzly 2.0将在今年12月发布。至于Atmosphere,主要看web社区反映和参与的程度如何了。因为现在关于Comet API还没有一个标准,还需要很多特定于容器的代码,社区的帮助会加快进度并提高稳定性。到目前为止,我可以确定的是0.1版(我开始的提议和第一版)会在明年夏天发布。
InfoQ: 有支持这个新框架的新工具发布吗?或许NetBeans插件可以?
JFA: 确实,IDE支持非常值得关注。我还想有Maven支持。
InfoQ: 你如何看待Grizzly和Atmosphere项目的不断发展,最后能提供可伸缩的应用和Comet编程范式吗?
JFA: Atmosphere的一个好处就是它使我能将Grizzly Comet的性能与其他容器进行比较。我想Grizzly会从中受益,因为通过与其他框架比较发现的任何性能问题都会有助于改进Grizzly。
Grizzly社区可能会继续独立于Atmosphere发展,因为嵌入式市场也在不断发展,grizzly就是为数不多的非常方便的嵌入式容器之一。我最近看到的一个示例就是运行在iPhone之上的grizzly comet,我对此惊讶不已。我相信在未来几年中越来越多的惊喜会涌现出来。
InfoQ: Jean-Francois,非常感谢你接受我们的采访。
你可以访问http://www.infoq.com/news/2008/01/comet-scalability以了解关于Comet和反向Ajax的更多信息。
查看英文原文:Grizzly and the New Atmosphere Comet Framework: Q&A with Project Lead Jean-Francois Arcand