2011-11-12 83 views
2

我已經編寫了一個使用嵌入式Jetty的應用程序,可以對其他服務進行網絡調用。Java非阻塞HTTP服務器

我認爲服務線程在等待網絡呼叫完成時處於空閒狀態。

有什麼辦法可以讓工作線程在請求​​之間切換,以執行當前可以完成的工作,然後當網絡調用返回時也可以處理該工作?所有工作都已完成後,將會返回一個請求。

我知道這是一個常見的範例,我已經將它用於非阻塞TCP網絡,但我不確定如何在Java HTTP服務器上實現此功能,同時還等待外部結果。

任何鏈接或解釋讚賞。

感謝

更新: 我使用Membase的和ElasticSearch(唯一的網絡電話)。 Membase返回「Future」對象,ElasticSearch返回「ListenableActionFuture」。我希望能夠繼續處理線程以響應這些對象被返回。

+0

您使用的是什麼版本的Jetty?我知道最新的一個支持Servlet 3.0 API,它具有異步請求處理的功能。但我不知道所有的細節。 –

回答

4

您可以看看Deft,它是單線程異步事件驅動的Web服務器。

2

Netty是一個Java庫,允許您執行異步網絡。

http://www.jboss.org/netty

Netty的支持HTTP,但它是一個相當低的水平庫。

更高層次庫是由Twitter finangle,

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

Finangle是建立在網狀的頂部,但支持連接池,負載均衡,並擁有大量的其他功能。 Finangle支持http。

2

如果你想與IO同時工作,我建議你添加一個線程池來執行工作。重新使用現有的線程是可能的,但是它可能會帶來很多額外的工作,但可能收益太少。