快速NIO,Java异步HTTP服务器

时间:2009-07-16 13:50:45

标签: java http asynchronous

this question之后,我实际上正处于为我的一个项目寻找合适的HTTP容器的阶段。我查看了几个容器,但我仍然不确定哪一个最适合高负载AJAX请求。 Apache Mina看起来很有希望,但也相对复杂。名为AsyncWeb的异步Web服务器实现似乎已经与Mina合并,但我找不到它的任何生产方法。在另一个问题中,我推荐了我真正喜欢的Simple HTTP服务器,因为它简单,清晰,干净,但我仍然不知道它是否符合目的。

此外,我不确定选择哪个请求处理概念:

  1. 为每个传入连接创建一个调度程序线程(优化当然可能包括一个线程池和一个调度队列),即完成所有工作。优点可能是,我不必处理那么多同步问题,但它可能会大大降低高负载的吞吐量。

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

  3. 任何可能适合的框架的经验以及两种不同的处理方法?

2 个答案:

答案 0 :(得分:7)

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

  

Hightide已预先配置   最先进的Ajax通信   DWR,ActiveMQ-Web等库   (JMS到浏览器)和Bayeux   协议(也称为cometd)。   部署您的应用程序   Hightide意味着它将扩展   顺利地结合了   Jetty的智能IO层和   延续机制

具体来说,已经投入了大量的工作来优化Jetty for AJAX。有关详细信息,请参阅this blog entry

答案 1 :(得分:3)

Simple HTTP subversion存储库中有一个示例。

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

它使用彗星演示实时市场数据,并且只有一个线程将更新发送到任意数量的客户端。 Simple有一个透明的传输层,它提供阻塞I / O语义,其优点是可以为每个连接的客户端提供基于固定ByteBuffer队列的NIO异步调度。因此,您可以获得具有可预测内存消耗的平滑透明NIO输出。此外,针对Jetty等服务器的性能测量显示x2性能提升。

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