【发布时间】:2009-12-03 19:54:42
【问题描述】:
是否可以在应用程序中级联监督者?
例如主管sup1 产生一个创建主管sup2 的子进程?
【问题讨论】:
是否可以在应用程序中级联监督者?
例如主管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,将向您展示“正常”主管树的样子。
您编写由应用程序主管监督的子系统应用程序。每个子系统可以是子系统主管下的多个子系统(继续以递归函数方式应用模式,直到用完粒度...)
【讨论】: