2011-11-12 17 views
2

他のサービスへのネットワークコールを行う埋め込みJettyを使用してアプリケーションを作成しました。Java非ブロック化HTTPサーバー

ネットワークコールが完了するのを待っている間、サービススレッドがアイドル状態であると推測します。

現時点で実行可能な作業を実行する要求と、ネットワーク呼び出しから返される作業を処理する要求を切り替える方法はありますか?すべての作業が完了すると、要求が返されます。

これは一般的なパラダイムであり、非ブロッキングTCPネットワーキングに使用していますが、外部結果を待つ間にJava HTTPサーバーでこれを実現する方法は不明です。

いずれかのリンクや説明をいただければ幸いです。

おかげ

アップデート:私はMemBase値とElasticSearch(唯一のネットワーク呼び出し)を使用してい 。 Membaseは "Future"オブジェクトを返し、ElasticSearchは "ListenableActionFuture"を返します。これらのオブジェクトが返されたことに応じて、スレッド上で処理を続行できるようにしたいと考えています。

+0

あなたはどのバージョンのJettyを使用していますか?私は最新のServlet 3.0 APIをサポートしていることを知っています。Servlet 3.0 APIは、非同期要求処理のための機能を備えています。しかし、私はすべての詳細を知らない。 –

答えて

4

シングルスレッドの非同期イベントドリブンWebサーバーであるDeftをご覧ください。

2

Nettyは、非同期ネットワーキングを可能にするJavaライブラリです。

http://www.jboss.org/netty

ネッティーは、httpをサポートしていますが、それはかなり低レベルのライブラリです。

高いレベルのライブラリは、Twitterでfinangleで、

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

Finangleは、網状の上に構築されたが、接続プーリング、ロード・バランシングをサポートしており、他の多くの機能を持っています。 Finangleはhttpをサポートしています。

2

IOと同時に作業したい場合は、作業を実行するスレッドプールを追加することをお勧めします。既存のスレッドを再利用することは可能ですが、多大な利益のために余分な作業が必要になります。

関連する問題