(注意:我还在学习,因此以下可能是一个完全愚蠢的架构)
我正在Erlang中构建一个简单的TCP服务器。我有一个层次结构,为每个对等连接启动一个管理程序,进而监督多路复用器,套接字读取器和套接字写入器。
当然,当客户端套接字关闭时,所有四个(主管,多路复用器,读卡器,写入器)都应该退出,因为它们没有意义留在它们周围。当套接字关闭并退出时,读取器/写入器会记录,但主管仍然会挂起。
如何设置主管以便发生这种情况?
答案 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
重新启动策略,但此处并不重要只想让整个事情崩溃。