播放:在出现故障时停止WebSocket演员

时间:2015-06-05 09:13:17

标签: scala playframework websocket akka

我使用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隐藏的某个演员的孩子)

2 个答案:

答案 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")
  }

对于任何其他处理程序,这也是一个有用的钩子,例如用户存在信息。