这是一个服务的示例,该服务以给定名称向人们打招呼,并跟踪该服务遇到了多少用户。请参阅下面的用法。
%% greeter.erl %% Greets people and counts number of times it did so. -module(greeter). -behaviour(gen_server). %% Export API Functions -export([start_link/0, greet/1, get_count/0]). %% Required gen server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -record(state, {count::integer()}). %% Public API start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, {}, []). greet(Name) -> gen_server:cast(?MODULE, {greet, Name}). get_count() -> gen_server:call(?MODULE, {get_count}). %% Private init({}) -> {ok, #state{count=0}}. handle_cast({greet, Name}, #state{count = Count} = State) -> io:format("Greetings ~s!~n", [Name]), {noreply, State#state{count = Count + 1}}; handle_cast(Msg, State) -> error_logger:warning_msg("Bad message: ~p~n", [Msg]), {noreply, State}. handle_call({get_count}, _From, State) -> {reply, {ok, State#state.count}, State}; handle_call(Request, _From, State) -> error_logger:warning_msg("Bad message: ~p~n", [Request]), {reply, {error, unknown_call}, State}. %% Other gen_server callbacks handle_info(Info, State) -> error_logger:warning_msg("Bad message: ~p~n", [Info]), {noreply, State}. terminate(_Reason, _State) -> ok. code_change(_OldVsn, State, _Extra) -> {ok, State}.
这是erlang shell中此服务的示例用法:
1> c(greeter). {ok,greeter} 2> greeter:start_link(). {ok,<0.62.0>} 3> greeter:greet("Andriy"). Greetings Andriy! ok 4> greeter:greet("Mike"). Greetings Mike! ok 5> greeter:get_count(). {ok,2}