Erlang: cascata supervisori?
-
11-09-2019 - |
Domanda
E 'possibile cascata supervisori all'interno di un'applicazione?
es. supervisore sup1
generando un processo figlio che crea un sup2
supervisore?
Soluzione
Probabilmente si desidera aggiungere il bambino come supervisore.
Si tratta di una voce nel childspec di un bambino di un supervisore. Il "tipo" del bambino può essere impostato su "supervisore":
http://www.erlang.org/doc/design_principles/sup_princ .html # spec
Probabilmente si può fare tramite il bambino di iniziare un supervisore per sé troppo ma è almeno meno elegante ed è meno evidente quello che stai facendo.
HTH, h.
Altri suggerimenti
Sì, si può semplicemente aggiungere supervisori come figli di un supervisore. O mix and match. Lo faccio qualcosa di simile a questo di solito:
(nella mia top supervisore livello)
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]}.
E poi qualcosa di simile emx_sup_data (supervisore comportamento) contiene:
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]}.
e qualcosa come emx_nodestate (comportamento gen_server)
init([]) ->
{ok, #state{status=starting, interested=[]}}.
funziona come un sogno ...!
Per vedere come altre persone strutturano le loro applicazioni Perché non si spara una shell ed eseguire la barra degli strumenti:
toolbar:start()
Che ti dà una visualizzazione grafica di una gerarchia supervisore. Un rapido sguardo alla albero supervisore del kernel, o mnesia o framboèsia, vi mostrerà ciò che un albero di 'normale' supervisore assomiglia.
Si compone un applicazione dei sotto-sistemi supervisionati da un soprintendente di applicazione. Ogni sotto-sistema può essere molte sub-sub-sistemi sotto il supervisore sotto-sistema (continuare ad applicare pattern in maniera funzionale ricorsivo fino ad esaurimento di granularità ...)