如果孩子退出,让主管死亡

时间:2016-05-12 09:12:16

标签: erlang otp

(注意:我还在学习,因此以下可能是一个完全愚蠢的架构)

我正在Erlang中构建一个简单的TCP服务器。我有一个层次结构,为每个对等连接启动一个管理程序,进而监督多路复用器,套接字读取器和套接字写入器。

当然,当客户端套接字关闭时,所有四个(主管,多路复用器,读卡器,写入器)都应该退出,因为它们没有意义留在它们周围。当套接字关闭并退出时,读取器/写入器会记录,但主管仍然会挂起。

如何设置主管以便发生这种情况?

1 个答案:

答案 0 :(得分:4)

您可以设置主管"最大重启频率"零,意味着如果任何一个孩子崩溃,主管会崩溃。管理程序模块的init功能如下所示:

init(Args) ->
    Multiplexer = #{id => multiplexer, start => ...},
    Reader = #{id => reader, start => ...},
    Writer = #{id => writer, start => ...},

    Flags = #{intensity => 0},
    {ok, {Flags, [Multiplexer, Reader, Writer]}}.

对于这样的情况,当主管监督紧密耦合的流程并且应该重新启动时,您通常会使用one_for_all重新启动策略,但此处并不重要只想让整个事情崩溃。