向所有进程发送消息

Send message to all processes

我是 Elixir 的新手,我有一堆 运行 进程,我需要从另一个进程向所有进程广播消息。在查阅了 Process 的文档后,我仍然不知道如何实现。

这可能不是最好的比较,但是是否有像 Java 中的 "notifyAll" 这样的功能?

这种方法(在评论中描述)首先容易受到 atoms DDOS 的攻击。 2M 的骨架会杀死你的 Erlang VM,因为原子不会被垃圾收集。此外,如 Kernel.spawn/3.

中所述,产生不受监视的进程不是一个好主意

通常,您使用 DynamicSupervisor to supervise children and it exposes which_children/1 可以轻松枚举并向所有人发送消息。

另一种方法是使用 :pg 模块。让你的骨骼加入进程组并向所有成员发送消息。

也可以使用 Phoenix.PubSub abstraction on top of :pg or Envio 来简化 PubSub 模式的实施。


如果您仍然希望使用 spawn/3 的初始方法起作用,请启动专门的进程来跟踪所有骨架(它们可能会在开始时向其发送“类似注册”的消息)并实施在此过程中迭代所有生成的骨架,发送所有消息。