服务器已启动?
有没有办法告诉gen_server:“supervisor已经初始化所有的gen_servers,现在你可以发送消息”?
我有一个工人gen_server,其工作是在他的监督树中设置其他gen_servers的状态。 如果我刚开始在配置服务器的init函数中发送消息,有时会得到{noproc,_}。 我想这意味着配置服务器要快:他在主管有足够的时间启动所有工作人员之前发送了消息。 我通过将timer:sleep(500)放在config_server:init()中来解决这个问题,它可以确保所有gen_server都有足够的时间进行初始化,但这看起来像是一个不合理的解决方案。
有没有适当的方法来做到这一点?
从init
返回超时时间为0
元组。 然后在返回之后立即调用handle_info(timeout, State)
。 在handle_info
进行一些调用,直到监控程序完成初始化(例如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).
这是我处理这个问题的案例。 该工作进程仅在请求时才被触发。
在函数init()
调用gen_server:cast(init, State)
。 消息“init”将首先进入消息队列
上一篇: server is up?