我使用Play框架和Akka actor进行WebSocket通信。我正在使用tryAcceptWithActor方法:
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 :(得分:0)
查看WebSocketActorSupervisor
的代码,Props
转换为actor的代码,默认策略被覆盖为
override def supervisorStrategy = OneForOneStrategy() {
case _ => SupervisorStrategy.Stop
}
因此,Stop
是默认行为。
答案 1 :(得分:0)
为了确保Johny的答案是正确的,请覆盖MyWebSocketActor的postStop方法。您将看到在Web套接字丢失时调用它。
override def postStop() = {
super.postStop()
log.debug("connection lost")
}
对于任何其他处理程序,这也是一个有用的钩子,例如用户存在信息。