Я думаю, что более оптимальный вариант состоит в том, чтобы использовать подсистему балансировки нагрузки, такую как haproxy. Можно настроить его, чтобы послушать на многих портах и использовать различные серверы бэкэнда.
Для реализации функциональности перенаправления пользователя к другому порту (или другой сервер) можно использовать backup
опция в haproxy.
Это - упрощенная конфигурация для Вашего фронтенда (клиенты) и серверы бэкэнда:
frontend my_clients 0.0.0.0:10000
acl its_ok always_true
use_backend my_backend if its_ok
default_backend my_backend
backend my_backend
balance source
server server1 IP:port other options...
server server2 IP:port other options...
Как сказано здесь, можно использовать backup
ключевое слово. Это означает, что сервер резервного копирования будет использоваться только, когда не будет никакого другого доступного несервера резервного копирования.
Это используется, прежде всего, для выравнивания нагрузки HTTP, но они говорят, что оно может использоваться для других находящихся в tcp сервисов.
Если он перестает работать, это похоже на проблему с сокетом, которая, скорее всего, исправлена в 0.4.1 / 0.4.2. В целом версия 0.3.8 очень-очень старая, и обновление устранит многие проблемы (включая проблемы с тайм-аутом, поломку труб и т. Д.).