Scala 使用自定义名称播放WebSocketActor createHandler
我正在使用(学习)在游戏应用程序中处理WebSocket。 我的控制器正在使用WebSocket.acceptWithActorScala 使用自定义名称播放WebSocketActor createHandler,scala,playframework,websocket,playframework-2.0,akka,Scala,Playframework,Websocket,Playframework 2.0,Akka,我正在使用(学习)在游戏应用程序中处理WebSocket。 我的控制器正在使用WebSocket.acceptWithActor def clientWS = WebSocket.acceptWithActor[JsValue, JsValue] { _ => upstream => ClientSesssionActor.props(upstream) } 除了其他一些“主管”参与者需要能够使用context.actorSelection(…)与所有/部分ClientSes
def clientWS = WebSocket.acceptWithActor[JsValue, JsValue] { _ =>
upstream => ClientSesssionActor.props(upstream)
}
除了其他一些“主管”参与者需要能够使用context.actorSelection(…)与所有/部分ClientSessionActor进行通信之外,一切都很好
但我所有的ClientSessionActor都是用如下路径创建的:
[akka://application/system/websockets/ 请求\u ID/处理程序]
以下是WebsocketActorSupervisor创建它们的行:
val webSocketActor = context.watch(context.actorOf(createHandler(self), "handler"))
这就是路径的“处理程序”部分的来源
我想为我的ClientSessionActor传递一个特定的名称,而不是获取“handler”
用另外一个参数重载整个调用堆栈似乎不太雅观:有带Connect的WebSocketActor.scala、WebSocketActorSupervisor(道具和构造函数)、WebSocketsActor receive,然后是WebSocket.scala中的所有内容
我知道我可以将主管引用传递给道具,但是当“主管”重新启动并需要与他的下属重新连接时,该怎么办
还有一件事,我意识到我可能可以得到所有的“处理程序”演员,但有两种以上的处理程序。是的,我可以让他们忽略针对其他处理组的MSG,但这感觉太多余了,发送的MSG比我应该发送的多3倍
有什么建议吗
詹姆斯?:)
谢谢每个
clientsessionactor
如何在preStart
上向主管发送注册消息,并将其存储在例如val sessions=new HashMap[String,ActorRef]
中
然后通过在postStop
private class WebSocketsActor extends Actor {
import WebSocketsActor._
def receive = {
case c @ Connect(requestId, enumerator, iteratee, createHandler) =>
implicit val mt = c.messageType
context.actorOf(WebSocketActorSupervisor.props(enumerator, iteratee, createHandler),
requestId.toString)
}
}
下面是play如何创建用于处理WebSocket的参与者的代码,它使用requestId命名。
我还有同样的问题:)为什么不使用自定义名称命名呢。当然,这正是我所做的。我只是觉得这是一种浪费——已经有了一个完全可用的演员注册系统,play没有使用它(据我所知)。那么为什么不让我提供这个名字呢。我想这是写给游戏团队的,我应该把它贴到邮件列表上。