Фон
Я хочу создать свою собственную одноранговую сеть с двумя одноранговыми узлами (должна быть индивидуальной). Я делаю это с помощью SocketIO, он отлично работает. Сначала я сделал это, используя архитектуру Клиент->Сервер, однако она не была идеальной для моих целей.
Текущая ситуация
Теперь я столкнулся с проблемой при создании одноранговой версии с двумя одноранговыми узлами. После того, как все клиенты подключены, они должны знать друг друга (ID+имя хоста). Для этого я придумал следующий план.
Клиент подключается к Socket IO в группе (одновременно с некоторыми другими устройствами), добавляется в пул сеансов с другими связанными клиентами (с помощью промежуточного маршрутизатора NodeJS).
Каждый новый клиент транслирует
newClient
сигнал.Каждый клиент транслирует данные ID+устройства другим при первоначальном присоединении.
Пока здесь все хорошо и работает.
- Всякий раз, когда клиент получает сигнал
newClient
, шаг 3 повторяется, поэтому, если устройства присоединяются к сеансу после того, как был создан первоначальный сеанс на шаге 1, новое устройство также получает данные клиента от существующих устройств.
Проблема
При наличии сеанса с n устройствами может быть выполнен шаг 3 раз (дляx > 2
и элемента N).
Для 100 клиентов шаг 3 выполнится 5153 раза, что довольно много.
Есть ли более разумный способ, чтобы данные устройства передавались реже, но при этом все подключенные устройства знали друг друга?