server is up?

Is there a way to tell a gen_server: "supervisor has initialised all gen_servers, now you can send then messages"?

I have a worker gen_server whose job is to set up states of other gen_servers in his supervision tree. If I just start sending messages in init function of my configuration server, sometimes it gets {noproc, _}. I suppose that means that config server was to fast: he sent messages before supervisor had enough time to start all workers. I fixed that by putting timer:sleep(500) in config_server:init(), which ensures all gen_server had enough time to initialise, but this seems like a inelegant solution.

Is there a proper way to do this?


Return tuple with timeout 0 from init . Then immediately after it returns, handle_info(timeout, State) will be called. In handle_info make some call which won't return until the supervisor finishes initialization (eg supervisor:which_children ).


info(PlayerId) ->
Pid = case global:whereis_name(util:getRegName({?MODULE, PlayerId})) of
    P when is_pid(P) ->
        P;
    _ ->
        {ok, P} = player_sup:start_child(PlayerId),
        P
end,
gen_server:call(Pid, info).

This is my case to handle this issue. This worker process is triggered only when it is requested.


in function init() call gen_server:cast(init, State) . message "init" will be first in message queue

链接地址: http://www.djcxy.com/p/38244.html

上一篇: 添加了一个gen的主管

下一篇: 服务器已启动?