2012-10-05 1 views
5

Dans les exemples fournis sur le github Cowboy, et dans certains des autres exemples que j'ai trouvés en ligne, il y a un à -un superviseur qui ne semble rien faire. Je crois même que j'ai vu un exemple qui a eu le commentaire suivant, "comme un vrai superviseur ne fait rien".Quel est le but du superviseur un-à-un dans de nombreux exemples de cow-boys?

Quel est l'objectif du module superviseur qui semble faire partie de tant d'exemples de cow-boys?

De l'exemple echo_get:

%% Feel free to use, reuse and abuse the code in this file. 

%% @private-module(echo_get_sup). 
-behaviour(supervisor). 

%% API. 
-export([start_link/0]). 

%% supervisor. 
-export([init/1]). 

%% API. 
-spec start_link() -> {ok, pid()}. 
start_link() ->  
    supervisor:start_link({local, ?MODULE}, ?MODULE, []). 

%% supervisor. 
init([]) -> 
    Procs = [], 
    {ok, {{one_for_one, 10, 10}, Procs}}. 

Répondre

6

De Erlang application behavior documentation:

start est appelé lors du démarrage de l'application et devrait créer l'arborescence de supervision en démarrant le superviseur haut. Il est prévu de retourner le pid du superviseur supérieur et un terme facultatif State, qui est par défaut []. Ce terme est passé tel quel pour s'arrêter.

Il a ce superviseur factice, donc il peut appeler à la fin de la fonction de démarrage here. Je pense que cela n'a d'autre but que de satisfaire cette condition.

1

Vous n'avez pas besoin de spécifier tous les enfants gérés par un superviseur au démarrage. Vous pouvez les ajouter/les démarrer dynamiquement en utilisant supervisor:start_child/2 et les gérer en utilisant supevisor:restart_child/2, supervisor:terminate_child/2 et supervisor:delete_child/2. Cela signifie que même si un superviseur n'a pas d'enfants depuis le début, cela ne signifie pas qu'il s'agit simplement d'un mannequin. Le commentaire selon lequel un superviseur réel «ne fait rien» est probablement lié au fait qu'un superviseur qui ne peut superviser que des processus et ne fonctionne pas comme des processus de travail. Ou du moins c'est ce que cela devrait signifier!

+0

Je ne vois aucune preuve que des fonctions start_child/2, etc. sont appelées. Je pense que la réponse donnée par cashmere @cashmere est plus susceptible d'être le cas. Bien sûr, je pourrais certainement manquer quelque chose ... – Jr0