Java的快速NIO,异步HTTP服务器

7

这个问题的基础上,我现在正在寻找适合我的项目的正确HTTP容器。我看了几个容器,但仍然不确定哪一个最适合高负载的AJAX请求。 Apache Mina看起来很有前途,但相对复杂。异步Web服务器实现称为AsyncWeb似乎已与Mina合并,但我还没有找到任何生产版本。在另一个问题中,我推荐了Simple HTTP服务器,因为它很简单,清晰和干净,但我仍然不知道它是否适用于此目的。

此外,我不确定选择哪种请求处理方法:

  1. 为每个传入连接创建一个调度程序线程(优化可能包括线程池和调度队列),该线程执行所有工作。优点可能是我不必处理那么多同步问题,但在高负载下可能会显著降低吞吐量。

  2. 因为它将成为高度模块化的应用程序,“流水线”(可能有更合适的术语)方法也可能奏效:创建固定数量的线程,每个线程用于特定任务。 例如,一个用于请求处理 ->一个用于标头反序列化(如果我以不同格式获取输入,如提交的HTML表单,XML-RPC,JSON等) ->一个用于“控制器分派”(执行我想要对这些数据执行的任何操作) ->一个用于将输出序列化为所需格式(JSON,XML,HTML等),并将每个请求移动到这些级别,直到完成。可能更难实现,但我有固定数量的线程(数量也可以取决于硬件)和关注点的清晰分离。

有没有任何适合这两种不同处理方法的框架的经验?


请查看 deftserver.org(这是一个年轻的项目,目前还没有准备好用于生产。免责声明:我是 deft 的贡献者)。 - Schildmeijer
2个回答

7
您可能需要查看Jetty,特别是Hightide

Hightide预配置了最先进的Ajax通信库,如DWR、ActiveMQ-Web(JMS到浏览器)和Bayeux协议(也称为cometd)。在Hightide上部署应用程序意味着它将平稳扩展,这要归功于Jetty智能IO层和continuations机制的结合。

具体而言,已经投入了大量工作来优化Jetty以用于AJAX。有关更多详细信息,请参见此博客文章


谢谢,那也听起来不错。我也会把Jetty放在我的评估清单上。 - Daff
有趣的是,有人不同意您的观点并因此对其进行了投票。为什么,我不知道…… - Brian Agnew

3

Simple HTTP子版本库中有一个示例。

http://simpleweb.svn.sourceforge.net/viewvc/simpleweb/trunk/src/demo/java/org/simpleframework/example/javafx/

它使用comet展示实时市场数据,并且只有一个线程向任意数量的客户端分发更新。Simple具有透明的传输层,提供带有异步调度优势的阻塞I/O语义,基于固定的ByteBuffer队列为每个连接的客户端服务。因此,您可以获得平稳透明的NIO输出和可预测的内存消耗。此外,与Jetty等服务器进行的性能测量显示大约有2倍的性能提升。

http://simpleweb.svn.sourceforge.net/viewvc/simpleweb/trunk/application/Plotter/ApacheBench/ScalabilityApacheBench.png?revision=1448


谢谢提供链接。我会看一下的。因为我自己对这个框架有积极的经验,所以最终我可能会选择使用它。 - Daff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接