服务器已启动?

有没有办法告诉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”将首先进入消息队列

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

上一篇: server is up?

下一篇: What's the best way to run a gen