, .
{via,Module,ViaName}
gen_server:start_link
, atoms
. . : http://erlang.org/doc/man/gen_server.html#start_link-4
, gproc
gen_server:start_link({via, gproc, {n, l, {?MODULE, Name}}, ?MODULE, [], []).
{via, gproc, ...}
gen_server, Name
:
gen_server:call({via, gproc, {n, l, {?MODULE, Name}}, {execute_command, Command}).
via
:
-define(SERVER(Name), {via, gproc, {n, l, {?MODULE, Name}}}).
:
gen_server:start_link(?SERVER("Testing"), ?MODULE, [], []).
gen_server:call(?SERVER("Testing"), {execute_command, Command}).
simple_one_for_one
temporary
, :
-module(my_cool_sup).
-behaviour(supervisor).
%% API
-export([start_link/1, start_child/1]).
%% Supervisor callbacks
-export([init/1]).
-define(SERVER, ?MODULE).
%% Helper macro for declaring children of supervisor
-define(CHILD(ChildName, Type, Args), {ChildName, {ChildName, start_link, Args}, temporary, 5000, Type, [ChildName]}).
%%====================================================================
%% API functions
%%====================================================================
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
start_child(Name) ->
supervisor:start_child(?SERVER, [Name]).
%%====================================================================
%% Supervisor callbacks
%%====================================================================
init([]) ->
RestartStrategy = {simple_one_for_one, 1, 5},
Children = [?CHILD(my_cool_server, worker, [])],
{ok, { RestartStrategy, Children} }.
gen_server
-module(my_cool_server).
-behavior(gen_server).
%% API
-export([start_link/3, execute_command/3]).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
-define(SERVER(Name), {via, gproc, {n, l, {?MODULE, Name}}}).
%%%
%%% API
%%%
start_link(Name) ->
gen_server:start_link(?SERVER(Name), ?MODULE, [], []).
execute_command(Name, Command) ->
gen_server:call(?SERVER(Name), {execute_command, Command}).
%%%
%%% gen_server callbacks
%%%
%% Your normal gen_server callbacks here...
my_cool_sup:start_child("My cool name").
, . , , already_started
, .
start_child
: http://erlang.org/doc/man/supervisor.html#start_child-2