(注意:我还在学习,因此以下可能是一个完全愚蠢的架构)
我正在用 Erlang 构建一个简单的 TCP 服务器。我有一个层次结构,它为每个对等连接启动一个监督者,依次监督一个多路复用器、一个套接字读取器和一个套接字写入器。
现在当然,当客户端套接字关闭时,所有四个(主管、多路复用器、读取器、写入器)都应该退出,因为它们没有意义。当套接字关闭和退出时,读写器会注意到,但主管仍然在附近徘徊。
如何设置主管以便发生这种情况?
您可以将监督者的“最大重启频率”设置为零,这意味着监督者将在其任何子级崩溃时崩溃。init主管模块的功能如下所示:
init(Args) ->
Multiplexer = #{id => multiplexer, start => ...},
Reader = #{id => reader, start => ...},
Writer = #{id => writer, start => ...},
Flags = #{intensity => 0},
{ok, {Flags, [Multiplexer, Reader, Writer]}}.
Run Code Online (Sandbox Code Playgroud)
对于这种情况,当主管监督紧密耦合且应该一起重新启动的进程时,您通常会使用one_for_all重新启动策略,但在这里这并不重要,因为您只想让整个事情崩溃。