Предположим, есть сервер и некоторый клиент. Клиент соединяется с сервером по TCP. При этом клиент очень не любит, когда рвется связь: в силу своего несовершенства он считает, что соединение, однажды установившись, никогда уже не рвется, а если оно все же порвется, то, считайте, он умирает, и приходится всю работу делать заново.
Нет ли какой-то готовой утилиты, которая организует «логически устойчивое к разрывам связи» псевдосоединение между клиентом и сервером? Вот как это могло бы работать:
|
|
|
КЛИЕНТ ----> localhost:1234 | server:1234 -----> СЕРВЕР
демонК <=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+> демонС
если здесь рвется, то демон утилиты
на клиенте реконнектится к демону
утилиты на сервере, но, что важно, при
этом КЛИЕНТ не считает, что соединение
с СЕРВЕРом было разорвано, т.к. КЛИЕНТ
соединен с демоном на локалхосте (а
СЕРВЕР, соответственно, тоже с демоном
на его хосте).
Т.е. идея в том, что даже если связь порвалась на день (выключили и заменили роутер, поменяли провайдера — вообще все, что угодно), КЛИЕНТ все равно продолжает считать, что он соединен с СЕРВЕРом, и никакого дисконнекта не было (но просто соединение вдруг стало очень-очень тормозным — пропускает 1 пакет в день). С локалхостом-то соединение никогда не рвется…
P.S.
Просьба не предлагать всякие TCP keep-alive, тайм-ауты на уровне TCP и прочую дребедень — решение тут явно должно быть на уровне более высокого уровня, чем TCP (т.к. заставить TCP-соединение не разрываться в случае, например, физической замены роутера или переезда к другому интернет-оператору невозможно). Также нет возможности делать доработки в клиенте и сервере.