我有一个主管,负责启动simple_one_for_one儿童。每个孩子实际上都是一个拥有自己的树的监督者。每个孩子都有一个唯一的ID,所以我可以区分他们。然后,每个gen_server都以start_link(Id)开头,其中:
-define(SERVER(Id), {global, {Id, ?MODULE}}).
start_link(Id) ->
gen_server:start_link(?SERVER(Id), ?MODULE, [Id], []).
因此,每个全局都可以很容易地使用{ gen_server,{Id,module_name}}来寻址。
现在,我想让这个孩子主管成为应用程序。所以,我的母亲主管应该开始申请,而不是主管。这应该很简单,但有一部分除外:将ID传递给应用程序。使用ID启动supervisor很容易:supervisor:start_child(?服务器,Id)。申请时该怎么做?我如何用不同的ID启动几个同名的应用程序(这样我就可以访问相同的.app文件)(这样我就可以用supervisor:start_child(?服务器,Id)启动我的孩子了)?
如果我的问题不够清楚,下面是我的代码。因此,目前,es_simulator_dispatcher启动了es_simulator_sup。我希望是这样的: es_simulator_dispatcher启动es_simulator_app,它启动es_simulator_sup。这就是全部内容:-)
提前感谢,dijxtra
发布于 2011-11-15 05:33:47
应用程序不在其他任何环境下运行,它们是顶级抽象。当您使用application:start/1
启动应用程序时,应用程序由管理应用程序的应用程序控制器启动。应用程序包含代码和数据,可能在运行时还包含在运行时执行应用程序任务的进程的监督树。由于应用程序的性质,运行应用程序的多个调用并不真正有意义。
我建议阅读OTP Design Principles User's Guide,了解动态口令的组件、它们之间的关系以及它们的用途。
发布于 2011-11-14 18:48:05
我认为应用程序并不像你想要的那样是动态构造的。我之所以只做一个应用程序,是因为在Erlang中,应用程序更多地是代码的捆绑包,而不是正在运行的进程的捆绑包(您可以说它们是编译时的工件,而不是运行时的工件)。
通常,您可以通过内置配置系统将配置提供给应用程序。也就是说,您使用application:get_env(Key)
来读取它应该使用的内容。还有一个application:set_env(...)
可以将特定的配置输入其中--但首选的方式是将配置文件放在磁盘上。这在你的情况下可能会也可能不会起作用。
在某种意义上,您要做的就是创建200个Apache配置文件,然后一个接一个地产生200个Apache系统,而不是运行一个系统,然后处理其中的多个域。
https://stackoverflow.com/questions/8088453
复制相似问题