Erlang如何设置自包含的主管树应用程序
我不确定我是否可以正确地表达我的问题,但我会尽我所能。
我发现你不得不建立一个主管树(sup,supressress,和其他更复杂的树)的方式很尴尬。
让我们举例来说,以下(我已经提出这些例子并对其进行了扩展):http://learnyousomeerlang.com/supervisors
我不喜欢启动我的应用程序(supervisor树)的想法,然后必须在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
对我来说,我不得不启动我的主管(或其他),然后通过shell进一步键入其他命令来获得我想要的。
对于一个真实世界的例子,让我们说例如我有一个Listen Supervisor,并且在这个主管我说我想总是有100个听众。 他们的工作是监听Listen Supervisor创建的套接字。 鉴于教程(和其他在线),我将不得不输入100次的shell来启动所有的孩子。
所以,我想我的问题是以下...
如何在应用程序或主管内部完成这些操作(不管您是否希望这样做),以便在启动光束文件后,不必在shell中输入任何内容。
我知道必须有一种方法,但是我不能提出一个足够好的架构来让我做到这一点是一种标准和干净的方式。
谢谢你的时间。
你有一些选择。
您可以在.app文件的env
或sys.config文件中定义一些变量,并将它们放入主管的init/1
,并返回足够数量的子规格。
如果孩子的数量和其他信息来自其他代码,他们可能会在不同的时间出现,您可以在监督员中有一个名为dispatcher
的孩子。 dispatcher
员的职责是获取关于启动孩子的信息,并将他们作为主管的孩子启动。
上一篇: Erlang how to set up a supervisor tree application that is self contained