3

我是网络开发的新手,我有一个小问题。我正在使用带有喷雾的 scala akka 来制作网站。我的领导给我一个问题:我有这样的回应

case HttpRequest(GET, Uri.Path("/ping"), _, _, _) => {
    Thread.sleep(10)
    sender ! HttpResponse(entity = "this is t2")
}

Thread.sleep(10) 代表一个重线程,恒定处理时间为 10ms,所以它使整个程序运行慢 1000 倍,那么如何让它检索 10 倍的 HTTPRequest 呢?提示是使用演员,但不知何故我阅读了整个文件,但仍然遗漏了一些东西

4

1 回答 1

1

一种方法:

case HttpRequest(GET, Uri.Path("/ping"), _, _, _) => {
    val replyTo = sender
    Future {
      someCPUIntensiveFunction()
      replyTo ! HttpResponse(entity = "this is t2")
    }
}

基本上,您将“重功能”调用移动到 Future 中。这将使接收 HttpRequest 的当前线程在创建未来后立即继续,并能够处理下一个 HttpRequest。未来将在单独的线程中执行其代码。因此,您的程序中有两个“路径”。一个,将处理 HttpRequest,另一个将执行someCPUIntensiveFunction()

于 2014-04-28T08:57:10.183 回答