Grizzly 与新的 Atmosphere Comet 框架:采访项目领导者 Jean-Francois Arcand

  • Dio Synodinos
  • 张龙

2008 年 7 月 14 日

话题:Java语言 & 开发架构

Grizzly 框架已经用在很多产品中了,如GlassFishSailfinRESTletOpenESB等等,通过采取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 规范之外的很多东西。

InfoQGrizzly 和 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

Java语言 & 开发架构