gpt4 book ai didi

scala - 使用自定义名称 Play WebSocketActor createHandler

转载 作者:行者123 更新时间:2023-12-02 04:50:46 24 4
gpt4 key购买 nike

我正在使用(学习)处理 play 应用程序中的 websockets。我的 Controller 正在使用 WebSocket.acceptWithActor

def clientWS = WebSocket.acceptWithActor[JsValue, JsValue] { _ =>
upstream => ClientSesssionActor.props(upstream)
}

一切都很好,除了一些其他“主管”actor 需要能够使用 context.actorSelection(...) 与所有/部分 ClientSessionActor 进行通信。

但是我所有的 ClientSessionActors 都是用这样的路径创建的:

[akka://application/system/websockets/REQ_ID/handler]

这是 WebsocketActorSupervisor 创建它们的行:

val webSocketActor = context.watch(context.actorOf(createHandler(self), "handler"))

这就是路径的“handler”部分的来源。

我想为我的 ClientSessionActor 传递一个特定的名称,而不是获取“处理程序”。

用一个参数重载整个调用堆栈似乎不够优雅:有 WebSocketActor.scala 和 Connect、WebSocketActorSupervisor(属性和构造函数)、WebSocketsActor 接收,然后是 WebSocket.scala 中的所有内容。

我知道我可以将 supervisor 引用传递给 props,但是当“supervisor”已经重启并且需要重新连接他的 minions 时怎么办?

还有一件事,我意识到我可能能够获得所有“处理程序”actor,但是处理程序不止两种。是的,我可以让他们忽略针对其他处理程序组的消息,但这感觉太多余了,发送的消息比我应该发送的多 3 倍。

有什么建议吗?

詹姆斯? :)

谢谢

最佳答案

如何让每个 ClientSessionActorpreStart 上向 supervisor 发送一个 Register 消息并将它们存储在例如。 val sessions = new HashMap[String, ActorRef]

然后通过在 postStop 中发送 Unregister 取消注册

关于scala - 使用自定义名称 Play WebSocketActor createHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28847279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com