gpt4 book ai didi

scala - 如何从 ActorFlow 获取 Actor 引用 (ActorRef)?

转载 作者:行者123 更新时间:2023-12-05 06:40:18 28 4
gpt4 key购买 nike

根据Play documentation on WebSockets建立 WebSocket 的标准方法是使用 ActorFlow.actorRef,它采用返回我的 Actor 的 Props 的函数。我的目标是获取对此底层 ActorRef 的引用,例如为了发送第一条消息或将 ActorRef 传递给另一个 actor 的构造函数。

就文档中的最小示例而言,我正在努力实现这一目标:

class WebSocketController @Inject() (implicit system: ActorSystem, materializer: Materializer) {

def socket = WebSocket.accept[String, String] { request =>
val flow = ActorFlow.actorRef { out => MyWebSocketActor.props(out) }
// How to get the ActorRef that is created by MyWebSocketActor.props(out)?
// Fictitious syntax (does not work)
flow.underlyingActor ! "first message send"
flow
}
}

如何获取对创建的 actor 的引用?

如果此时无法获得 ActorRef(是否需要流的具体化?),存储对创建的 actor 的引用的最简单方法是什么?

最佳答案

使用 Actor.preStart() 钩子(Hook)你可以做一些技巧来访问 actorRef:

class MyWebSocketActor(
out: ActorRef,
firstMessage: Any,
actorRegistry: ActorRef
) extends Actor {
import play.api.libs.json.JsValue
override def preStart(): Unit = {
self ! firstMessage
actorRegistry ! self
}
...
}

def socket = WebSocket.accept[String, String] { request =>
ActorFlow.actorRef { out =>
Props(new MyWebSocketActor(out, "First Message", someRegistryActorRef))
}
}

关于scala - 如何从 ActorFlow 获取 Actor 引用 (ActorRef)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42923671/

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