Java非阻塞HTTP服务器

时间:2011-11-12 17:40:59

标签: java multithreading http nonblocking

我使用嵌入式Jetty编写了一个应用程序,可以对其他服务进行网络调用。

我假设服务线程在等待网络呼叫完成时处于空闲状态。

有没有办法让一个工作线程在请求​​之间切换,以执行当前可以完成的工作,然后当网络调用返回时也处理它?完成所有工作后,将返回请求。

我知道这是一个常见的范例,我已将它用于非阻塞TCP网络,但我不确定如何在Java HTTP服务器上实现此功能,同时还要等待外部结果。

感谢任何链接或解释。

由于

更新 我正在使用Membase和ElasticSearch(唯一的网络调用)。 Membase返回“Future”对象,ElasticSearch返回“ListenableActionFuture”。我希望能够继续处理线程以响应返回的这些对象。

3 个答案:

答案 0 :(得分:4)

您可以查看Deft,它是单线程,异步,事件驱动的Web服务器。

答案 1 :(得分:2)

Netty是一个允许您进行异步网络的java库。

http://www.jboss.org/netty

Netty支持http,但它是一个相当低级别的库。

更高级别的图书馆是twitter,

http://twitter.github.com/finagle/

Finangle建立在netty之上,但支持连接池,负载平衡,并具有许多其他功能。 Finangle支持http。

答案 2 :(得分:2)

如果您想在IO的同时进行工作,我建议您添加一个线程池来执行工作。可以重复使用现有的线程,但是它可能会带来很多额外的工作,但效益可能太小。