2015-07-23 2 views
0

У меня есть приложение, основанное на спрее 1.3.3, и я пытаюсь остановить HTTP-сервер, отправив сообщение. Официальная документация говорит:Spray.IO Остановить http-сервер с Http.Unbind

Остановка. Чтобы явно остановить сервер, отправьте команду 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 к/выключения и есть мое приложение будет вниз

ответ

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 ... => ... 
    } 
} 
+0

Я знаю, я не понимаю, как захватить при получении. Не могли бы вы предоставить какой-то код? –