Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用自定义名称播放WebSocketActor createHandler_Scala_Playframework_Websocket_Playframework 2.0_Akka - Fatal编程技术网

Scala 使用自定义名称播放WebSocketActor createHandler

Scala 使用自定义名称播放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

我正在使用(学习)在游戏应用程序中处理WebSocket。 我的控制器正在使用WebSocket.acceptWithActor

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没有使用它(据我所知)。那么为什么不让我提供这个名字呢。我想这是写给游戏团队的,我应该把它贴到邮件列表上。