3

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は{global、{Id、module_name}}で簡単に追加できます。

ここで、この子スーパーバイザーをアプリケーションにします。したがって、私の母のスーパーバイザーは、スーパーバイザーではなくアプリケーションを開始する必要があります。IDをアプリケーションに渡すという一部を除いて、これは簡単なはずです。IDでスーパーバイザーを開始するのは簡単です:supervisor:start_child(?SERVER、[Id])。アプリケーションでそれを行うにはどうすればよいですか?同じ名前の複数のアプリケーションを(同じ.appファイルにアクセスできるように)異なるIDで起動するにはどうすればよいですか(子供をsupervisor:start_child(?SERVER、[Id]))で起動できますか?

私の質問が十分に明確でない場合は、ここに私のコードがあります。したがって、現在、es_simulator_dispatcherはes_simulator_supを開始します。これが欲しいのですが、es_simulator_dispatcherはes_simulator_appを開始し、es_simulator_supはes_simulator_supを開始します。それがすべてです:-)

よろしくお願いします、dijxtra

4

2 に答える 2

3

アプリケーションは他の何の下でも実行されません。それらはトップレベルの抽象化です。アプリケーションを起動するとapplication:start/1、アプリケーションは、アプリケーションを管理するアプリケーションコントローラーによって起動されます。アプリケーションにはコードとデータが含まれており、実行時にアプリケーションを実行するプロセスの監視ツリーが含まれている可能性あります。アプリケーションの性質上、アプリケーションの複数の呼び出しを実行することは実際には意味がありません。

OTPのコンポーネントの説明、それらの関連性、およびそれらの使用目的については、OTP設計原則ユーザーズガイドをお読みになることをお勧めします。

于 2011-11-14T21:33:47.253 に答える
1

私はあなたが望むような動的な構築を目的としたアプリケーションはないと思います。Erlangでは、アプリケーションは実行中のプロセスのバンドルよりもコードのバンドルであるため、単一のアプリケーションを作成します(実行時よりもコンパイル時のアーティファクトであると言えます)。

通常、組み込みの構成システムを介して構成をアプリケーションにフィードします。つまり、使用application:get_env(Key)する必要があるものを読み取るために使用します。特定の構成を1つにフィードする方法もありapplication:set_env(...)ますが、推奨される方法はディスク上の構成ファイルです。これはあなたの場合にはうまくいくかもしれませんし、うまくいかないかもしれません。

ある意味では、200個のApache構成ファイルを作成し、200個のApacheシステムを並べて生成することに対応します。単一のシステムを実行して、その中の複数のドメインを処理するのではありません。

于 2011-11-14T10:48:04.770 に答える