是否可以在应用程序中级联主管?
例如,主管sup1
产生一个创建主管的子进程sup2
?
您可能希望将孩子添加为主管。
它是主管的孩子的 childspec 中的一个条目。孩子的“类型”可以设置为“主管”:
http://www.erlang.org/doc/design_principles/sup_princ.html#spec
也许你也可以通过孩子自己开始监督来做到这一点,但它至少不那么优雅,而且你在做什么也不那么明显。
HTH,H。
是的,您可以简单地将主管添加为主管的子项。或者混搭。我通常会这样做:
(在我的顶级主管中)
init([]) ->
Args = [],
ModuleArray = [get_info(Module, Args)
|| Module
<- [emx_nodestate, emx_sup_data, emx_sup_util, emx_sup_api,
emx_flow]],
{ok, {{one_for_one, 3, 1}, ModuleArray}}.
get_info(Module, Args) ->
{Module, {Module, start_link, [Args]}, permanent, 10000,
worker, [Module]}.
然后像 emx_sup_data (行为主管)这样的内容包含:
init([]) ->
Args = [],
ModuleArray = [get_info(Module, Args)
|| Module <- [job_housekeep]],
{ok, {{one_for_all, 3, 1}, ModuleArray}}.
get_info(Module, Args) ->
{Module, {Module, start_link, [Args]}, permanent, 10000,
worker, [Module]}.
和类似 emx_nodestate (behaviour gen_server)
init([]) ->
{ok, #state{status=starting, interested=[]}}.
像梦一样工作......!
要了解其他人如何构建他们的应用程序,为什么不启动 shell 并运行工具栏:
toolbar:start()
这为您提供了主管层次结构的图形视图。快速浏览一下内核主管树,或 mnesia 或 yaws,将向您展示“正常”主管树的样子。
您编写由应用程序主管监督的子系统的应用程序。每个子系统可以是子系统主管下的许多子子系统(继续以递归功能方式应用模式,直到用完粒度......)