2013-05-12 6 views
5

Java Play2アプリは、同期サードパーティクライアントライブラリを介してデータを取得するために、いくつかの外部Webサービスを呼び出しています。このアプリでは、高いトラフィックとスケーラビリティが必要です。Play 2:play.libs.WS非同期処理用サードパーティ製クライアントライブラリ

プレイドキュメントは言う:サードパーティのクライアントライブラリ(すなわち、ない 使用してプレイの非同期WSのAPI) を介してREST/WebサービスAPIを使用して :

ケースがブロックする可能性があり、あなたのコードが含まれている場合...]

あなたがブロッキングコードをFuturesにラップすることができます。 これは

は対照的に、IOの次の種類がブロックされません[...]、それだけでブロッキングが別のスレッドで発生することを意味し、それは非を遮断することはありません。 プレイWSのAPI、 ...

デフォルトの再生プールがFuturタスクに使用されるため、Play2 Javaアプリケーションでは、約束事を使用して非同期にすることは実際には役に立ちません。その結果、多くのFuturを使用すると、大きなプールのデフォルトのスレッドで同期呼び出しのみを使用する場合と同じ結果になります。同じプール内のスレッドの数はおおよそ同じです。

は、だから私の質問は以下のとおりです。

  • が本当に非同期(プレイ・デフォルト・プール内の任意のスレッドをブロックしていない)のJava APIでplay.libs.WS APIですか?
  • 高いトラフィックとスケーラビリティが必要な場合は、サードパーティのクライアントライブラリではなく、常にそれを使用する必要があります
  • play.libs.WS APIで使用されるスレッドプールは何ですか? WS呼び出し?
  • play.libs.WS APIのように非同期になる方法は、サードパーティの同期クライアントを先物でラップすることですか?

どうもありがとう

ロイック

+0

コードを見ると、play.libs.WSは(AsyncCompletionHandler を使用して)Nettyプールを使用しているようです。 私はそうですか? – Loic

答えて

1

ギョームBORTがプレイメーリングリスト上で言ったように、play.libs.WS API「は、AsyncHttpライブラリ自身が管理し、独自のスレッドプールを持っていますが、それはNIOをフードの下で使用しているので、基本的には本当にノンブロッキングなので問題はありません」

できるだけ頻繁に使用する必要があります。