向所有进程发送消息

问题描述 投票:0回答:1

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

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

erlang elixir
1个回答
2
投票

这种方法(评论中描述的)首先是容易受到原子DDOS的攻击。2M的骷髅会杀死你的 埃尔兰虚拟机因为原子没有被垃圾回收。另外,正如在下面的文章中所说的那样,产生没有被监控的进程并不是一个好主意。Kernel.spawn/3.

通常情况下,你使用 DynamicSupervisor 监管儿童,它暴露了 which_children/1 允许轻松列举并向他们所有人发送消息。

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

我们也可以使用 Phoenix.PubSub 抽象化 :pg Envio 以缓解 PubSub 模式的实现。


如果您仍然希望您的初始方法与 spawn/3 来工作,启动专门的进程,该进程将跟踪所有的骨架(他们可能会在启动时给它发送一个 "类似于寄存器 "的消息),并在这个进程中实现对所有产生的骨架的迭代,给所有的骨架发送一个消息。

© www.soinside.com 2019 - 2024. All rights reserved.