我有一个场景,当演员收到特定的消息时,它必须将消息转发给当时存在的所有孩子。
我认为我有2种方法可以解决这个问题。
getContext().actorSelection("*").forward(message, getContext());
或
getContext().getChildren().forEach(child -> child.forward(message, getContext()));
如果不完全理解演员选择的内部实现,很难知道哪个会更好。我打算用我期望要求的那种规模来执行一些基准测试,但是我希望有经验的用户可以对此有所了解。
由于
答案 0 :(得分:1)
我没有对它进行基准测试,但我正在寻找两种选择的实现。两者在性能方面实际上应该非常相似,因为它们最终会使用可迭代的参与者参考。
另一方面,你可以check表示字符串" *"被转换为一个表达式,一个actorSelection中的forward将只与该actor的子节点匹配,然后将消息转发给每个匹配的子节点。
matchingChildren.foreach(_.tell(sel.msg, sender))
并在需要时以递归方式执行此操作(例如在" * / *"中)。
因此我建议使用getChildren来避免解析字符串(" *")的过载,将其翻译成正则表达式,并过滤匹配的子项。