Erlang上的牛仔在关机时崩溃

我在关闭与我的牛仔处理程序相关的Erlang虚拟机时遇到了很多错误。 我有一个运行start_listeners()函数的simple_one_for_one主管,它运行cowboy:start_http()。

一切开始,没有错误,正常处理请求。

如果我关闭了erlang虚拟机,我会得到:

[error]主管bitter_rpc_sup的子bitter_rpc_http_id以bitter_rpc_sup开头:start_listeners()处于未定义的出口,原因在上下文中死亡shutdown_error

还有一些与牛仔进程有关的其他错误被杀死并异常终止。 牛仔不遵守OTP惯例关闭吗? 有没有办法让我拦截监督员关机并手动关闭所有牛仔流程/牧场池?

我应该在哪里试图压缩这个错误?


您可以创建牧场孩子并将其添加到您的主管中:

init([]) ->
    %% define Ref, NbAcceptors, IP, Port, Dispatch
    ...
    WebChild = ranch:child_spec(Ref,
                                NbAcceptors,
                                ranch_tcp,
                                [{ip, IP}, {port, Port}],
                                cowboy_protocol,
                                [{env, [{dispatch, Dispatch}]}]),
    {ok, {{one_for_one, 10, 10}, [WebChild]}}.

仔细看看包含的牛仔示例,http服务器不是直接监督,而是在Cowboy应用程序下运行。

所以我改变了我的rpc守护进程的主管,什么也不做:

init([]) ->
    Procs = [],
    {ok, {{one_for_one, 10, 10}, Procs}}.

并在主进程中实例化牛仔调度员,从开始(,)返回空监督员,

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

上一篇: Cowboy on Erlang crashes on shutdown

下一篇: Supervising an ordinary process in Erlang/OTP supervisor behaviour