我使用嵌入式Jetty编写了一个应用程序,可以对其他服务进行网络调用。
我假设服务线程在等待网络呼叫完成时处于空闲状态。
有没有办法让一个工作线程在请求之间切换,以执行当前可以完成的工作,然后当网络调用返回时也处理它?完成所有工作后,将返回请求。
我知道这是一个常见的范例,我已将它用于非阻塞TCP网络,但我不确定如何在Java HTTP服务器上实现此功能,同时还要等待外部结果。
感谢任何链接或解释。
由于
更新 我正在使用Membase和ElasticSearch(唯一的网络调用)。 Membase返回“Future”对象,ElasticSearch返回“ListenableActionFuture”。我希望能够继续处理线程以响应返回的这些对象。
答案 0 :(得分:4)
您可以查看Deft,它是单线程,异步,事件驱动的Web服务器。
答案 1 :(得分:2)
Netty是一个允许您进行异步网络的java库。
Netty支持http,但它是一个相当低级别的库。
更高级别的图书馆是twitter,
http://twitter.github.com/finagle/
Finangle建立在netty之上,但支持连接池,负载平衡,并具有许多其他功能。 Finangle支持http。
答案 2 :(得分:2)
如果您想在IO的同时进行工作,我建议您添加一个线程池来执行工作。可以重复使用现有的线程,但是它可能会带来很多额外的工作,但效益可能太小。