【发布时间】:2017-02-23 09:07:53
【问题描述】:
我是 erlang 新手,我有以下代码:
-module (test_srv).
-behaviour (gen_server).
-export ([start_link/0, init/1, handle_info/2]).
start_link() ->
gen_server:start_link(?MODULE, [], []).
init([]) ->
self() ! asdasd,
{ok, new_state}.
handle_info(Msg, State) ->
io:format("server got ~p , now state is ~p~n", [Msg, State]),
{noreply, State}.
我在 erl shell 中测试:
1> {_, P} = test_srv:start_link().
server got asdasd , now state is new_state
问题是,当服务器未初始化且未就绪时向服务器发送消息时,gen_server 如何处理消息?我有以下猜测:
gen_server 立即处理消息,并将消息发送到
handle_info回调,但在init回调中会丢失初始化状态gen_server 存储未初始化服务器的消息,并在服务器初始化后发送消息。
我想知道 erlang 或 gen_server 是如何处理这个问题的?处理消息的原理是什么?
【问题讨论】:
标签: erlang erlang-otp