2

在这篇带有 Scalatra 的 Angular.js帖子中,据说 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' 将返回结果或超时。然而,在这种情况下,请求将等待 Actor 的某种反应。

protected implicit val timeout = Timeout(10)如果由于类的顶部没有返回结果,应用程序将不会锁定(这将指示myActor ? q在 10 秒后放弃结果)。

第二个示例是纯基于未来的方法,其中“未来”的主体执行一系列异步操作,并且 onComplete 返回结果。

我建议您阅读Akka Actors 文档以获取更多详细信息

于 2013-10-18T03:16:20.133 回答