Erlang如何设置自包含的主管树应用程序

Erlang如何设置自包含的主管树应用程序,erlang,erlang-supervisor,Erlang,Erlang Supervisor,我不确定我是否能正确地表达我的问题,但我会尽我所能 我发现设置主管树(sup、sup-tress和其他更复杂的树)的方式很尴尬 让我们举个例子,如下(我已经做了这些例子并对它们进行了扩展): 我不喜欢启动我的应用程序(管理树),然后在shell上发送erl命令,让应用程序也按照我想要的方式运行。以站点中的底部外壳为例: 1> supervisor:start_child(band_supervisor, [djembe, good]). Musician Janet Tennelli, p

我不确定我是否能正确地表达我的问题,但我会尽我所能

我发现设置主管树(sup、sup-tress和其他更复杂的树)的方式很尴尬

让我们举个例子,如下(我已经做了这些例子并对它们进行了扩展):

我不喜欢启动我的应用程序(管理树),然后在shell上发送erl命令,让应用程序也按照我想要的方式运行。以站点中的底部外壳为例:

1> supervisor:start_child(band_supervisor, [djembe, good]).
Musician Janet Tennelli, playing the djembe entered the room
{ok,<0.690.0>}
2> supervisor:start_child(band_supervisor, [djembe, good]).
{error,{already_started,<0.690.0>}}
3> supervisor:start_child(band_supervisor, [drum, good]).
Musician Arnold Ramon, playing the drum entered the room
{ok,<0.696.0>}
3> supervisor:start_child(band_supervisor, [guitar, good]).
Musician Wanda Perlstein, playing the guitar entered the room
{ok,<0.698.0>}
4> supervisor:terminate_child(band_supervisor, djembe).
{error,simple_one_for_one}
5> musicians:stop(drum).
Arnold Ramon left the room (drum)
ok
1>主管:启动孩子(乐队主管,[djembe,good])。
音乐家珍妮特·坦内利(Janet Tennelli)演奏吉姆贝(djembe)进入房间
{好的,}
2> 主管:启动儿童(乐队主管,[djembe,good])。
{错误,{已启动,}
3> 主管:启动儿童(乐队主管,[鼓,好])。
音乐家阿诺德·拉蒙(Arnold Ramon)演奏着鼓走进了房间
{好的,}
3> 主管:启动儿童(乐队主管,[吉他,好])。
音乐家万达·帕尔斯坦(Wanda Perlstein)弹着吉他走进了房间
{好的,}
4> 主管:终止子女(乐队主管,djembe)。
{错误,简单的一对一}
5> 音乐家:停(鼓)。
阿诺德·拉蒙离开了房间(鼓)
好啊
对我来说,这很奇怪,我必须启动我的主管(或其他什么),然后通过shell进一步输入其他命令以获得我想要的

对于一个现实世界的例子,让我们假设我有一个倾听的主管,在这个主管上,我说我希望总是有100个倾听的工人。他们的工作是监听监管者创建的套接字。鉴于本教程(以及其他在线教程),我必须在shell中键入100次才能启动所有子级

所以,我想我的问题如下

如何在应用程序或主管中完成这一切(无论您希望如何),以便在启动beam文件后不必在shell中键入任何内容

我知道必须要有一种方法,但我就是不能想出一个足够好的架构,让我这样做是一个标准和干净的方式


谢谢您的时间。

您有一些选择

您可以在或中定义一些变量,并在supervisor的
init/1
中获取它们,并返回足够数量的子规范


如果子项的计数和关于它们的其他信息来自其他代码,并且它们可能在不同的时间出现,则可以在supervisor中有一个名为
dispatcher
的子项,您的调度员的职责是获取有关启动孩子和启动他们作为主管孩子的信息。

因此,对于每个侦听器工作人员,我需要在侦听器的内部有一个孩子规范?我想我不需要这样做,只需要用supervisor命令添加子级?是的,你需要,当你开始一个新的子级时,你也需要将新的childspec添加到supervisor的childspec。所以我只需要一种生成100个子级Spec的方法。。。是否有自动执行此操作的代码?(他们都是相同的工作者)这看起来很简单,
[#{id=>Int,start=>{…}|Int