2017-08-30 52 views
0

我不确定我是否可以正确表达我的问题,但我会尽我所能。Erlang如何设置自包含的主管树应用程序

我觉得你必须设置一个主管树(sup,supress,和其他更复杂的树)的方式很尴尬。

让我们举个例子,下面的(我已经做出例子,它们扩展):http://learnyousomeerlang.com/supervisors

我不喜欢开始我的应用程序(导师树),然后无需发送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 

对我来说很是怪异,我将不得不开始我的上司(或其他),然后在通过shell其他命令进一步类型得到我想要的东西。

对于一个现实世界的例子,让我们说例如我有一个监听主管,在这个主管我说我想总是有100个监听工作人员。他们的工作是监听Listen Supervisor创建的套接字。鉴于教程(和其他在线),我将不得不输入100次的shell来启动所有的孩子。

所以,我想我的问题是下面...

这怎么都可以申请或主管(但是要做到这一点)内完成的,所以什么也没被键入到外壳开始你的光束文件后。

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

谢谢你的时间。

回答

1

您有一些选择。

您可以在env of .app filesys.config file中定义一些变量,并将其置于主管的init/1中,并返回足够数量的子规格。

如果孩子的数量和其他信息来自其他代码,他们可能会在不同的时间,你可以有一个名为dispatcher的孩子在主管,你的调度员的责任是获得关于首发儿童的信息,并开始他们的孩子主管。

+0

因此,对于每个listen_worker,我需要在listen_sup中有一个子规范?我以为我不需要那样做,只需要添加主管命令的孩子? – Mike5050

+0

是的,你需要,当你开始一个新的孩子,你添加新的childspec主管的childspecs。 – Pouriya

+0

所以我只需要一种方法来生成100个子规格......是否有一些代码会自动执行此操作? (他们都是同样的工人) – Mike5050

相关问题