在这篇文章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线程吗?
答案 0 :(得分:1)
这两个电话都是异步的。 'get'将返回结果或超时。在这种情况下,请求将等待来自Actor的某种反应。
如果由于课程顶部的protected implicit val timeout = Timeout(10)
而未返回结果,应用程序将无法锁定(这将指示myActor ? q
在10秒后放弃结果。)< / p>
第二个例子是一个纯粹的基于未来的方法,其中'Future'的主体执行一系列操作async,onComplete返回结果。
我建议您阅读Akka Actors documentation了解更多详情