我創建了一個封裝tcp/ip功能的通用行爲。該行爲的所有用戶都必須執行回調函數,以處理來自套接字另一端的解析「命令」。補償one_for_one管理員無法重新啓動子節點:tcp/ip端口偵聽器
我的通用behvour創建一個通過gen_tcp:accept監聽端口的端口偵聽器進程。當有人連接到端口時,端口監聽器會要求監控人員啓動一個新的端口監聽器,同時繼續處理與剛剛連接的任何客戶端的套接字通信。因爲這些端口監聽器/套接字處理器都是動態創建的並且是相同的,所以我使用simple_one_for_one管理器來創建它們。標準的東西。
這是我的問題。如果端口監聽過程消失,整個behivour將不起作用,因爲沒有任何監聽端口。因爲port_listener是由simple_one_for_one管理員創建的,所以管理員無法重新啓動新的port_listener。
那麼,我應該創建一個keep_alive進程來監視「最新」端口偵聽器,並要求superviosr在死亡時啓動另一個偵聽器嗎?或者,對於這種情況還有其他一些最佳做法嗎?
另外,有沒有辦法看到/檢查由此行爲創建的進程?這不是一個應用程序,所以appmon在這裏不起作用。
感謝
所以,我遵循你的建議,並有一個one_for_one主管啓動port_listener。當客戶端連接port_listener時,要求主管啓動一個「客戶端/套接字」進程並對其進行控制。我想知道在我不得不擔心快速丟包問題 – Jr0
@ Jr0之前系統需要多忙,唯一的方法就是基準測試。我的觀點是下一個:因爲我看到port_listener進程採取的任何一個操作都不會阻止其執行很長時間,所以這不是瓶頸。如果你對類似行爲的表現感興趣,你可以閱讀這個[blogpost](http://lionet.livejournal.com/42016.html)。 – Keynslug
@ Jr0,http://trapexit.org/Building_a_Non-blocking_TCP_server_using_OTP_principles可能也有幫助。 – Keynslug