Spray.IO使用Http.Unbind停止http服务器

时间:2015-07-23 20:57:22

标签: spray

我有一个基于喷雾1.3.3的应用程序,我试图通过发送消息来停止http服务器。 官方文件说:

  

停止。要显式停止服务器,请发送Http.Unbind命令   HttpListener实例(此实例的ActorRef可用   作为Http.Bound确认事件的发送者来自何时   服务器已启动。)

以下是启动服务器的方式:

(IO(Http) ? Http.Bind(httpListener, interface = iface, port = port)).map {
case m: Http.Bound => println(s"Success $iface:$port")
case fail : Http.CommandFailed => println(s"Bad try :(")
}

我尝试将消息Http.Unbind发送到httpListener,但没有成功。似乎不是那个演员

可能我需要以某种方式提取Http.Bound消息的发送者引用?但是如何?

这是我的httpListener的负责人:

class MyHttpListener extends HttpServiceActor {

  import context.dispatcher

  def receive = runRoute(

    path("shutdown") {

      get {

        actors.httpListener ! Http.Unbind
        complete("Stopping server")

      }

    }

无论如何,我只想将http请求发送到/ shutdown并让我的应用程序停止运行

1 个答案:

答案 0 :(得分:0)

sender消息的Bound应该是Spray监听器,所以当收到该消息时,您可以捕获它。

你没有发布你的演员,所以这有点不同,但我希望这会有所帮助。

class MyStarter extends Actor {

    // this will be the listener
    var myListener: ActorRef = _

    override def preStart(): Unit = {
      implicit val system = context.system
      IO(Http) ! Http.Bind(...)
    }

    override def receive: Receive = {
      case msg: Bound =>
        // when you receive the Bound message it was sent by the listener
        myListener = sender()
        ...
      case ... => ...
   }
}