2012-07-18 140 views
5

TLDR:是否存在可自動重新連接到有時會失敗的TCP服務器的可重用代碼?自動重新連接到TCP主機


我正在寫一個服務器應用程序 - 稱之爲hal - 這也開闢了一些TCP連接到其他服務器 - 其中xbmc。我原本是這樣寫的,所以當xbmc失敗時,xbmc erlang進程將停止,並隨後由其主管重新啓動。

顯然,這不是在erlang中執行持久性TCP連接的好方法。首先,它並不是真正的工作:當xbmc失敗時,這個過程會很快重新啓動,並且主管會關閉整個hal程序。其次,我顯然不應該使用這個主管:Erlang Supervisor Strategy For Restarting Connections to Downed Hosts(當我閱讀它,這個鏈接的問題只回答「主管是否解決這個問題?」,並且不是我的問題的重複)

我是認爲這聽起來像是一個相當常見的用例,即使主機不時出現故障,也儘可能保持TCP連接的連接。是否有一些OTP或其他庫代碼我應該用來實現這一目標?

回答

3

不,在OTP中沒有任何事情可以爲您做到這一點。

我想說,考慮到我自己寫這個的次數,現在是編寫體面連接管理庫的好時機。特別是考慮最近一次連接嘗試和結果歷史的人,可以給出一個端點地址(主機名和端口),並使用主機名查找返回的多個地址爲具有多個目標的端點執行快速故障轉移。

+0

謝謝。回答「否」並不總是那麼容易:)對於你的下一個開源項目,我建議你做這個連接管理器:D – 2012-07-19 09:37:41

+0

碰巧,現在我或多或少都在寫它。如果/當它被髮布,我會更新我的答案。 – archaelus 2012-07-23 14:13:31