Автоматическое обнаружение устройства (Python или все, что я могу запустить на Rasbian) - PullRequest
0 голосов
/ 27 января 2019

Ситуация:
Я работаю над старшим дизайнерским проектом, который включает в себя расчет источника сигнала путем корреляции звука со многих устройств, которые все находятся в одной сети WIFI.Устройства обмениваются информацией с использованием REST apis.

. Архитектура является ведущим ведомым, где ведущее устройство будет запрашивать аудио у всех подчиненных устройств.Прямо сейчас, ведомые устройства нуждаются в IP главного устройства.Затем они говорят «привет» ведущему устройству, которое сохраняет свой IP-адрес, местоположение и т. Д. В списке.

Что я думаю, я хочу:
Я бы хотел, чтобы подчиненные устройства имеликакой-то способ автоматического определения IP-адреса главного устройства.Я не думаю, что я действительно беспокоюсь о безопасности.Каков наилучший способ сделать это?Есть ли идиоматический способ сделать это?

Я думаю, что я просто не могу найти правильные слова для Google

Решения, которые я рассмотрел:
1. Назначитьстатический IP для всех (или только главный блок).
- не идеально, потому что он будет работать только на одном маршрутизаторе
- не скользко

Ведущий модуль прослушивает жестко запрограммированный порт и миньоны отправляют широковещательный IP.
  • Может работать не на всех маршрутизаторах
  • не выглядит элегантно

1 Ответ

0 голосов
/ 27 января 2019
Ведущий модуль прослушивает жестко запрограммированный порт и отправляет сообщения миньонов на широковещательный IP-адрес.

Да, использование общеизвестного порта для сближения является стандартным способом решения этой проблемы.

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

Миньон должен помнить IP самого последнего мастера и пытаться одноадресно передать его при запуске.

Рассмотрите возможность использования формата пакета в следующих строках: {magic_number, version, start_time, num_minions, option_list_of_minions}

Список миньонов будет включать в себя {ip_addr, time_of_last_transaction} и будет пустым, если списокбольше не вписывается в некоторый пакет UDP ограниченного размера.Миньоны могли обнаружить главную перезагрузку, заметив, что start_time изменилось, и вскоре после перезагрузки снова подключатся.Старайтесь случайным образом дрожать в таймерах задержки, чтобы мы не увидели грохочущего стада миньонов.

...