6

Play は「リアクティブ」なフレームワークであると説明されており、非同期プログラミングに役立ちます。play のアーキテクチャについてもっと知りたいのですが、主に:

  • イベントループはありますか?

  • 多くの akka アクター システムがありますか? それらは多数のスレッドプールによってサポートされていますか?

  • もしそうなら、いくつのスレッドプールがあり、それらの目的は何ですか (ルーティング、リクエスト処理、約束の償還、アノームなど)。

  • ブロックしても問題ない実行スレッドはどれですか(どこで高価な計算を行うことができますか)? 絶対にブロックしてはならない実行スレッドはどれですか?

これに関するリソース/ウィキ/アドバイスは本当に役に立ちます。ありがとうございました

4

2 に答える 2

7

注: 次の内容は Play! 2.1.x. 遊ぶため!2.0.4 nico_ekito の回答を参照してください。

クライアントとのやり取りは、次の図に要約できます。

Play! のアーキテクチャ

Play の HTTP ハンドラー ( Nettyの上に構築されたもの) は、独自の実行コンテキスト内に存在します。conf/routesリクエストを受信すると、URL に従って (アプリケーションのファイルを使用して) 呼び出すアプリケーションのエントリ ポイントを見つけようとします。この時点で、HTTP 要求のヘッダーのみがメモリに読み込まれます。

次に、エントリポイントが呼び出されます。通常はactionで、残りの body があればそれをロードします。これは、別の実行コンテキストである Play! conf/application.conf「ユーザー」実行コンテキスト。アプリケーションのファイルで構成できる Akka アクター ディスパッチャーとして定義されます。

最後に、アクション内で非同期呼び出しを実行できます (例: Web サービスを呼び出す)。これらの非同期呼び出しはすべて Scala のFuture API を使用するため、呼び出しサイトのスコープで利用可能な実行コンテキストを使用します。だからあなたはプレイを使うことができます!「ユーザー」実行コンテキスト (で定義play.api.libs.concurrent.Execution.defaultContext)。

要約すると、プレイ!次のタスクに個別の実行コンテキストを使用します。

  • リクエストを受け取る (Netty HTTP ハンドラー) ;
  • アクションを呼び出します (「ユーザー」実行コンテキスト)。

また、非同期計算に必要な実行コンテキストを自由に使用できます (Play! の「ユーザー」実行コンテキストを含む)。

すべてのユーザー コードがデフォルトで Play! 「ユーザー」実行コンテキスト。ブロックすると、それ以上ユーザー コードを実行できなくなりますが、他のすべての操作は続行できます。

膨大な計算を行う場合は、専用の実行コンテキストを使用することをお勧めします。

于 2012-11-07T19:35:39.940 に答える
1

Akkaのデフォルト設定とPlayのアクターのリストを見てください!ウィキ

于 2012-09-30T14:26:03.017 に答える