Автоматическое повторное подключение к хосту TCP

TLDR: существует ли повторно используемый код для автоматического повторного подключения к TCP-серверу, который иногда дает сбой?


Я пишу серверное приложение — назовем его hal — которое также открывает некоторые соединения TCP с другими серверами — среди них xbmc. Первоначально я написал его таким образом, чтобы при сбое xbmc процесс xbmc erlang останавливался и впоследствии перезапускался его супервизором.

Судя по всему, это не лучший способ создания постоянных TCP-соединений в erlang. Во-первых, на самом деле это не работает: при сбое xbmc процессы перезапускаются слишком быстро, и супервизор закрывает всю программу hal. Во-вторых, я, по-видимому, не должен использовать для этого супервизора: Стратегия супервизора Erlang для перезапуска подключений к отключенным хостам (насколько я читал, этот связанный вопрос отвечает только на вопрос «решает ли супервизор это?» и не является дубликатом моего вопроса)

Я думаю, что это звучит как достаточно распространенный вариант использования, поддерживающий максимально возможное соединение TCP даже с хостом, который время от времени отключается. Есть ли какой-то OTP или другой библиотечный код, который я должен использовать для достижения этой цели?


person Magnus Hoff    schedule 18.07.2012    source источник


Ответы (1)


Нет, в OTP нет ничего, что могло бы сделать это за вас.

Я бы сказал, что, учитывая, сколько раз я писал это сам, пришло время написать достойную библиотеку управления соединениями. В частности, тот, который учитывает недавнюю историю попыток подключения и результатов, может получить адрес конечной точки (имя хоста и порт) и использовать несколько адресов, возвращенных при поиске имени хоста, для выполнения быстрого аварийного переключения для конечных точек с несколькими пунктами назначения.

person archaelus    schedule 18.07.2012
comment
Спасибо. Не всегда легко ответить «нет» :) Для вашего следующего проекта с открытым исходным кодом я предлагаю сделать этот менеджер соединений: D - person Magnus Hoff; 19.07.2012
comment
Так получилось, что я более или менее пишу это сейчас. Я обновлю свой ответ, если/когда он будет выпущен. - person archaelus; 23.07.2012