喷涂如何在请求完成后执行某些操作

时间:2015-09-02 05:05:49

标签: scala spray

complete(OK,"some result")

doSomeStuff()

我需要在回复回复后做一些动作。如何做到?

2 个答案:

答案 0 :(得分:0)

您可以使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> </script>Actor在单独的线程上运行该操作,以释放处理程序线程,以便它可以处理其他请求。

通常您会回复with Future,表明处理尚未完成。

答案 1 :(得分:0)

complete指令只是ctx => ctx.complete的快捷方式,喷射路由只是从HttpRequest到Unit HttpRequest => Unit的函数,因此您可以创建这样的路径:

val myRoute = get {
  path("resource") { ctx =>
    ctx.complete(OK, "some result")
    doSomeStuff()
  }
}

一个重要的事情是doSomeStuff()函数在路由处理程序actor上执行,而actor 在运行时不会处理任何其他请求。因此,如果长时间运行,向一些工作者发送消息来做实际工作是明智的。例如:

val myRoute = get {
  path("resource") { ctx =>
    ctx.complete(OK, "some result")
    workerActor ! DoSomeStuff
  }
}