2015-06-05 2 views
1

Я использую Play framework и аккорды Akka для общения через WebSocket. Я использую метод tryAcceptWithActor:Игра: остановить актер WebSocket в случае неудачи

def socket = WebSocket.tryAcceptWithActor[String, String] { request => 
    Future.successful(request.session.get("user") match { 
    case None => Left(Forbidden) 
    case Some(_) => Right(MyWebSocketActor.props) 
    }) 
} 

Я хотел MyWebSocketActor, чтобы остановить, когда он выходит из строя (например, бросать исключение). Является ли это стратегией супервизора по умолчанию? В противном случае, как я могу определить такую ​​стратегию? (Я не знаю, если MyWebSocketActor созданы в качестве актеров на высшем уровне или детей какой-то актер спрятанных Play)

ответ

0

Глядя на код WebSocketActorSupervisor, который где Props превращается в актера, имеет стратегию по умолчанию переопределяется, как

override def supervisorStrategy = OneForOneStrategy() { 
    case _ => SupervisorStrategy.Stop 
} 

Итак, Stop поведение по умолчанию.

0

Чтобы убедиться, что ответ Джона верен, замените метод postStop MyWebSocketActor. Вы увидите, что он вызывается, когда веб-сокет потерян.

override def postStop() = { 
    super.postStop() 
    log.debug("connection lost") 
    } 

Это также полезный крюк для любых дополнительных обработчиков, например. информация о присутствии пользователя.

Смежные вопросы