- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用(学习)处理 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 倍。
有什么建议吗?
詹姆斯? :)
谢谢
最佳答案
如何让每个 ClientSessionActor
在 preStart
上向 supervisor 发送一个 Register 消息并将它们存储在例如。 val sessions = new HashMap[String, ActorRef]
。
然后通过在 postStop
中发送 Unregister 取消注册
关于scala - 使用自定义名称 Play WebSocketActor createHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28847279/
我正在使用(学习)处理 play 应用程序中的 websockets。我的 Controller 正在使用 WebSocket.acceptWithActor def clientWS = WebSo
我是一名优秀的程序员,十分优秀!