[英]Broadcast message to actors watching a particular actor?
如何向正在观看特定演员的所有演员广播消息?
对于上下文,假设我有一个AuctionActor
(可能是远程actor),正在被大量AuctionParticipantActor
类型AuctionParticipantActor
。 我希望AuctionActor
将各种消息广播到AuctionParicipantActor
类型。
一种可能是AuctionActor
保留所有参与者ActorRef
实例的集合,然后在需要将消息发送给所有参与者时遍历该集合。 这似乎效率低下,我希望有一个更好的解决方案...
如果您不想像迭戈·马蒂诺亚(Diego Martinoia)提到的那样使用PubSub,我建议您将Routers
与BroadcastingLogic
。 这与您在ActorRefs集合中提到的方向一致,但是使用Akka功能可以使它比仅在AuctionActor
的集合上迭代更高效。
从Akka Docs
路由器被设计为在接收消息并将消息快速传递到路由方面非常高效。
普通角色可以用于路由消息,但是角色的单线程处理可能会成为瓶颈。 路由器可以通过优化允许并发路由的常规消息处理管道来实现更高的吞吐量。
在您的情况下,它可能看起来像这样:
class AuctionActor extends Actor {
var router = Router(BroadcastRoutingLogic(), Vector[ActorRefRoutee]())
def receive = {
case AddParticipant(ref) =>
router = router.addRoutee(ref)
case RemoveParticipant(ref) =>
router = router.removeRoutee(ref)
case update: ImportantUpdate =>
router.route(update, self)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.