Приложение Simple_one_for_one - PullRequest
       33

Приложение Simple_one_for_one

3 голосов
/ 11 ноября 2011

У меня есть руководитель, который запускает детей simple_one_for_one.Каждый ребенок на самом деле является руководителем, у которого есть свое дерево.Каждый ребенок запускается с уникальным идентификатором, поэтому я могу их различить.Затем каждый gen_server запускается с start_link (Id), где:

-define(SERVER(Id), {global, {Id, ?MODULE}}).
start_link(Id) ->
    gen_server:start_link(?SERVER(Id), ?MODULE, [Id], []).

Таким образом, каждый gen_server можно легко добавить с помощью {global, {Id, module_name}}.

Now I 'Я хотел бы сделать этого ребенка надзирателем в приложении.Итак, моя мать должна запускать приложения вместо руководителей.Это должно быть просто, за исключением одной части: передача идентификатора в приложение.Начать супервизор с идентификатором очень просто: supervisor: start_child (? SERVER, [Id]).Как мне сделать это для приложения?Как я могу запустить несколько приложений с одним и тем же именем (чтобы я мог получить доступ к одному и тому же файлу .app) с другим ID (чтобы я мог запустить своих детей с супервизором: start_child (? SERVER, [Id]))?

Если мой вопрос недостаточно ясен, вот мой код.Итак, в настоящее время es_simulator_dispatcher начинает es_simulator_sup .Я хотел бы иметь это: es_simulator_dispatcher запускает es_simulator_app, который запускает es_simulator_sup.Вот и все, что нужно сделать: -)

Заранее спасибо, dijxtra

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Приложения не работают ни под чем, они являются абстракцией высшего уровня.Когда вы запускаете приложение с application:start/1 приложение запускается с помощью контроллера приложений , который управляет приложениями.Приложения содержат код и данные, и, возможно, во время выполнения дерево наблюдения процессов, выполняющих приложения вещь во время выполнения.Запуск нескольких вызовов приложения на самом деле не имеет смысла из-за природы приложений.

Я бы предложил прочитать Руководство пользователя по принципам разработки OTP для описания компонентов OTP, как онии как они предназначены для использования.

1 голос
/ 14 ноября 2011

Я не думаю, что приложения, предназначенные для динамического построения, как вы хотите.Я бы сделал одно приложение, потому что в Erlang приложения представляют собой наборы кода, а не наборы запущенных процессов (можно сказать, что они являются артефактом времени компиляции, а не времени выполнения).

Обычновы передаете конфигурацию в приложение через встроенную систему конфигурации.То есть вы используете application:get_env(Key) для чтения того, что должно использовать.Существует также application:set_env(...) для подачи определенной конфигурации в одну, но предпочтительным способом является файл конфигурации на диске.Это может или не может работать в вашем случае.

В некотором смысле, то, что вы делаете, соответствует созданию 200 файлов конфигурации Apache, а затем порождает 200 систем Apache рядом друг с другом, вместо того, чтобы запускать одну изатем обработайте несколько доменов внутри него.

...