向观看特定演员的演员播放消息?

时间:2017-06-20 08:38:54

标签: scala akka akka-remote-actor akka-remoting

如何向正在观看特定演员的所有演员播放消息?

对于上下文,假设我有大量AuctionActor类型正在监视的AuctionParticipantActor(可能是远程参与者)。我希望AuctionActorAuctionParicipantActor类型广播各种消息。

一种可能性是AuctionActor保留所有参与者ActorRef实例的集合,然后在需要向所有参与者发送消息时循环遍历此集合。这似乎效率低下,我希望有更好的解决方案......

1 个答案:

答案 0 :(得分:1)

如果您不想按照Diego Martinoia的说法使用PubSub,我建议Routers使用BroadcastingLogic。这与你在ActorRefs集合中提到的方向有关,但是使用Akka功能来实现它比仅仅迭代AuctionActor中的集合更有效。

来自Akka Docs

  

路由器旨在极其高效地接收消息并将其快速传递给路由器。

     

普通的actor可以用于路由消息,但是actor的单线程处理可能成为瓶颈。通过优化通常允许并发路由的消息处理管道,路由器可以实现更高的吞吐量。

在您的情况下,它可能如下所示:

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)
  }
}