2

この投稿Angular.js with Scalatraでは、http 呼び出しは非同期であると言われています。アクターへの呼び出しが次のように行われていることがわかります。

myActor ? q

ただし、scalatra のホームページでは、AsyncResult を使用して呼び出しをカプセル化していることがわかります。

get("/"){
    new AsyncResult { def is = 
      Future {
        // Add async logic here
        <html><body>Hello Akka</body></html>
      }
    }
  }

両者に違いはありますか?最初のものは未来を返すアクターを呼び出していることを理解していますが、それは両方の呼び出しが非同期であることを意味しますか?

シンクロニシティの仕組みについてもう少し詳しく教えてください。

 get("/query/:key/:value") {
    contentType = formats("json")
    val q = Query(params("key"), params("value"), mongoColl)
    myActor ? q
  }

httpスレッドは解放されていますか?

4

1 に答える 1

1

どちらの呼び出しも非同期です。「get」は、結果またはタイムアウトのいずれかを返します。ただし、この場合、リクエストはアクタからの何らかの反応を待ちます。

protected implicit val timeout = Timeout(10)クラスの先頭にあるために結果が返されない場合、アプリケーションはロックアップしません(これmyActor ? qにより、10 秒後に結果を放棄するように指示されます)。

2 番目の例は、'Future' の本体が一連の操作を非同期で実行し、onComplete が結果を返す、純粋な Future ベースのアプローチです。

詳細については、Akka Actors のドキュメントを読むことをお勧めします。

于 2013-10-18T03:16:20.133 に答える