Playframework 将actor从其观察者中移除的最佳方法

Playframework 将actor从其观察者中移除的最佳方法,playframework,akka,actor,Playframework,Akka,Actor,我用游戏框架和akka编写websocket游戏。我尝试从其经理中删除玩家玩家参与者通过连接表示玩家状态 public类播放器扩展了UntypedActor{ 私有最终字符串openId; 私人最终代理人退出; 公共播放器(字符串openId,ActorRef out){ this.openId=openId; this.out=out; } @凌驾 public void preStart()引发异常{ Application.clientManager.tell( 新建ClientsMana

我用游戏框架和akka编写websocket游戏。我尝试从其经理中删除玩家<代码>玩家参与者通过连接表示玩家状态

public类播放器扩展了UntypedActor{
私有最终字符串openId;
私人最终代理人退出;
公共播放器(字符串openId,ActorRef out){
this.openId=openId;
this.out=out;
}
@凌驾
public void preStart()引发异常{
Application.clientManager.tell(
新建ClientsManager.PlayerConnectedMessage(openId,self()),self())
);
}
@凌驾
public void postStop()引发异常{
//可以在这里告诉我身份证吗?
}
}
创建时,播放机从
prestart
在manager actor中注册。当连接关闭时,
Player
将销毁。我需要从经理那里删除它

public类ClientManager扩展了UntypedActor{
私有静态映射客户端=新HashMap();
@凌驾
public void onReceive(对象消息)引发异常{
if(播放机连接消息的消息实例){
最终PlayerConnectedMessage connectedMessage=(PlayerConnectedMessage)消息;
context().watch(connectedMessage.client);
客户,看跌期权(
connectedMessage.id,
connectedMessage.client
);
}else if(消息instanceof Terminated){
final ActorRef toDelete=((终止)消息).actor();
//如何删除,我只有ActorRef
删除(…);
}
}
公共静态类PlayerConnectedMessage{
私有最终字符串id;
私人最终委托人;
public PlayerConnectedMessage(字符串id,ActorRef客户端){
this.id=id;
this.client=client;
}
}   
}
在我的体系结构中,我希望存储具有
Map
的客户机,其中
String
-id来自may logic。因此,我无法在
终止的
消息中删除客户端-我只有
ActorRef

可能的解决方案:使用id告诉
玩家的
postStop
向经理断开
消息,并且不再使用
观看

是否有一个优雅的解决方案,使用“watch”方式,或者使用
postStop()
也很好。我担心可能的客户流失