2016-05-12 102 views
1

监事死(注:我还在学习,因此,下面可能是一个完全愚蠢的架构)如果让孩子退出

我建立一个简单的TCP服务器在二郎山。我有一个层次结构,为每个对等连接启动一个监督器,然后监督一个多路复用器,一个套接字阅读器和一个套接字编写器。

当然,当客户端套接字关闭时,所有四个(主管,多路复用器,读者,作者)应该退出,因为它们没有任何意义。当套接字关闭并退出时,读写器会记录下来,但主管仍然挂着。

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

回答

5

您可以将主管的“最大重启频率”设置为零,这意味着如果其任何子管理器崩溃,主管将崩溃。主管模块的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重启策略,但这里没关系,因为你只是想让整个事情崩溃。

+3

非常感谢!我将读写器设置为重新启动=>暂时的,这似乎可以防止当这些孩子退出(出于任何原因)时监督员崩溃。现在我已经设置了restart => transient,现在似乎可以工作。 –