将动态主管添加到 ejabberd

Posted

技术标签:

【中文标题】将动态主管添加到 ejabberd【英文标题】:Add a dynamic supervisor to ejabberd 【发布时间】:2011-11-26 12:35:07 【问题描述】:

是否可以在 ejabberd 中启动一个主管模块,我可以为每个连接添加一个 gen_fsm 模块?

具体来说,我想创建一个在服务器启动(或连接进入)时启动的主管。我有几个gen_servers 我想开始,但我正在寻找一些指导的部分是当我看到这个用户的存在变得可用时如何动态地将gen_fsm 模块添加到我的主管?

【问题讨论】:

【参考方案1】:

您可能想看看Simple one for on supervisor,其中:

是一个简化的 one_for_one 主管,其中所有子进程都是 动态添加同一进程的实例

...

启动时,主管不会启动任何子进程。相反,所有的孩子 通过调用动态添加进程:

supervisor:start_child(Sup, List)

...

基本上,您在以下情况下使用这种监管者:

    所有孩子都是同一类型 您想动态添加子项

这似乎是你的情况。

【讨论】:

+1,还要注意 ejabberd 已经在一些模块上做到了这一点,包括 ejabberd_c2s

以上是关于将动态主管添加到 ejabberd的主要内容,如果未能解决你的问题,请参考以下文章

如何将孩子添加到 erlang 主管?

如何在 Elixir 中建模主管树

Erlang:supervisor(3),添加子进程

Elixir 中的动态主管规范

Erlang OTP 主管 gen_tcp - error,eaddrinuse

Celery-Supervisor:如何重新启动主管工作以使新更新的 celery-tasks 工作?