以下scalatra示例中的(myActor?q)异步如何?

时间:2013-10-17 13:36:56

标签: scala angularjs akka actor scalatra

在这篇文章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>
      }
    }
  }

两者有区别吗?我知道第一个是调用一个返回未来的actor,这是否意味着两个调用都是异步的?

你能详细说明一下

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

是发布的http线程吗?

1 个答案:

答案 0 :(得分:1)

这两个电话都是异步的。 'get'将返回结果或超时。在这种情况下,请求将等待来自Actor的某种反应。

如果由于课程顶部的protected implicit val timeout = Timeout(10)而未返回结果,应用程序将无法锁定(这将指示myActor ? q在10秒后放弃结果。)< / p>

第二个例子是一个纯粹的基于未来的方法,其中'Future'的主体执行一系列操作async,onComplete返回结果。

我建议您阅读Akka Actors documentation了解更多详情