Я сосредоточусь на проблеме обнаружения.Как клиенты узнают, какие серверы доступны и какие ws-соединения есть у каждого?
Один из подходов - добавить третий тип узла, назовите его broker .Существует один брокер, и все клиенты и серверы знают, как его достичь.(Например, все клиенты и серверы настроены с IP-адресом или именем хоста брокера.)
Когда сервер запускается, он регистрируется у брокера: «У меня есть каналы w, x, y, z и я принимаю запросы на 1.2.3.5: 1234" .Посредник отслеживает это состояние, возможно, в хеш-таблице.
Когда клиенту нужен канал ws y, он сначала связывается с посредником: «Какой сервер имеет канал ws y?»Если брокер знает, у кого есть канал y, он сообщает клиенту IP-адрес и порт сервера.Клиент может затем связаться с сервером напрямую.(Если несколько серверов могут получить доступ к каналу y, брокер может вернуть список серверов вместо одного.)
Если серверы работают «долго», клиенты могут кэшировать «сервер X имеет канал y"информация и общаться с брокером только тогда, когда им нужно получить доступ к новому каналу.
При таком дизайне клиенты используют брокера для поиска интересующих серверов.Серверы вообще не должны ничего знать о клиентах.А «реальный» трафик (клиенты, получающие доступ к каналам через серверы) по-прежнему передается напрямую между клиентами и серверами - без участия брокера.
HTH.И, к сведению, я определенно не эксперт.