2012-07-18 19 views
5

TLDR: Czy istnieje kod wielokrotnego użytku do automatycznego ponownego łączenia się z serwerem TCP, który czasami kończy się niepowodzeniem?Automatyczne ponowne połączenie z hostem TCP


Piszę aplikację serwera - nazwać hal - że także otwiera kilka połączeń TCP do innych serwerów - wśród nich xbmc. Pierwotnie napisałem to tak, że gdy xbmc zawiodło, proces erlang xbmc został zatrzymany, a następnie ponownie uruchomiony przez jego przełożonego.

Podobno nie jest to dobry sposób na wykonywanie trwałych połączeń TCP w erlangu. Po pierwsze, to nie działa: po niepowodzeniu xbmc procesy zostałyby uruchomione zbyt szybko, a supervisor zamknąłby cały program hal. Po drugie, najwyraźniej nie powinienem używać do tego nadzorcy: Erlang Supervisor Strategy For Restarting Connections to Downed Hosts (Czytając to, to powiązane pytanie odpowiada tylko "czy przełożony to rozwiązuje?" I nie jest duplikatem mojego pytania)

Jestem myślenie to brzmi jak rozsądnie powszechny przypadek użycia, utrzymywanie połączenia TCP tak jak to możliwe, nawet z hostem, który znika od czasu do czasu. Czy jest jakiś kod OTP lub inny kod biblioteki, który powinienem użyć, aby to osiągnąć?

Odpowiedz

3

Nie, w OTP nie ma nic, co by to zrobiło.

Powiedziałbym, że biorąc pod uwagę, ile razy sam to napisałem, nadszedł czas, by napisać przyzwoitą bibliotekę zarządzania połączeniami. W szczególności taki, który uwzględnia najnowszą historię prób połączenia i wyników, można podać adres punktu końcowego (nazwa hosta i port) i użyć wielu adresów zwróconych przez funkcję wyszukiwania nazwy hosta do szybkiego przełączania awaryjnego dla punktów końcowych z wieloma adresami docelowymi.

+0

Dzięki. Nie zawsze łatwo jest odpowiedzieć "nie" :) Dla twojego następnego projektu open source, proponuję zrobienie tego menadżera połączeń: D –

+0

Tak się składa, że ​​mniej więcej teraz go piszę. Zaktualizuję moją odpowiedź, jeśli zostanie wydana. – archaelus