2016-05-12 101 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,現在似乎可以工作。 –