4

Play2がどのように構成されているかについてさまざまな情報を入手しています。それはウェブサイト上でそれがakka上に構築されていると言っています、それはおそらくそれが接続ごとにアクターを使用することを意味しますか?また、他のイベントが別の接続で発生するのを防ぐため、ブロッキングコードを記述しないように指示されています(node.jsのイベントループをブロックする方法のようなものです)。1つのアクターのコードをブロックしても、別のアクターのコードはブロックされないので、どうしてそうなるのでしょうか。それは、node.jsのようなアクターとコールバックを使用することのポイントではありませんか?

4

1 に答える 1

2

Play が Akka の上に構築されていると言うとき、それは Web サーバーではなくフレームワークを意味します。接続は、組み込み Web サーバーであるJBoss Netty ( http://netty.io/ ) によって処理されます。

ここで説明されているように、非同期応答を提供するために、接続を Akka アクターにバインドする (またはバインドしない) ことができます: http://www.playframework.com/documentation/2.1.0/JavaAkka

アクター間の通信は、メッセージ (任意のオブジェクト) を送信し、応答を待機しない (別のアクターと通信するためにメソッドを呼び出さない) ため、ノンブロッキングです。

ロジックは次のようになります。

//somewhere in the code
ActorB.tell(new Request(...));
-----------------------------------------
ActorB:

    public void onReceive(Object msg) throws Exception {
        if (msg instanceof Request) {
            //process the request
            ActorA.tell(new Response(...))
        }
    }
----------------------------------------------------------------
ActorA:

    //ActorA is notified
    public void onReceive(Object msg) throws Exception {
        if (msg instanceof Response) {
            System.out.println("Response: " + msg)
        }
    }

メソッド tell() はメッセージを送信し、応答を待ちません。

于 2013-03-05T22:24:07.067 に答える