2015-06-05 51 views
1

我使用Play框架和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轉換爲actor的代碼,默認策略被覆蓋爲

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

所以,Stop是默認行爲。

0

爲了確保Johny的回答是正確的,請覆蓋MyWebSocketActor的postStop方法。你會看到它在網絡套接字丟失時被調用。

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

這對任何其他處理程序也是一個有用的掛鉤,例如,用戶存在信息。

相關問題