自动设备发现(python 或任何我能在 raspbian 上 运行 的东西)

Automatic device discovery (python or anything I can run on raspbian)

情况:
我正在从事一个高级设计项目,该项目涉及通过关联来自同一 WIFI 网络上的许多设备的音频来计算信号源。设备使用 REST api 交换信息。

架构为主从,其中主单元将向所有从属单元请求音频。现在,从属单元需要主单元的 IP。然后他们对将 IP、位置等存储在列表中的主单元说 'hello'。

我想我想要的:
我希望从属单元有一些自动发现主单元 IP 的方法。我不认为我真的关心安全。做这个的最好方式是什么? 有惯用的方法吗?

我想我可能只是没有正确的词来 google

我考虑过的解决方案:
1. 为所有(或仅主设备)分配静态 IP。
- 不理想,因为它只能在一个路由器上工作
- 不圆滑

  1. 主单元侦听硬编码端口和小单元 post 以广播 IP。
    • 可能不适用于所有路由器
    • 看起来不优雅
  1. Master unit listens on hard-coded port and minions post to broadcast IP.

是的,使用众所周知的端口会合是解决此问题的标准方法。

我会稍微改变一下你的方法。奴才比主人多,所以主人应该做广播。 minion 可能会在开机时发送一个(或几个)广播,以鼓励 master 立即回复。但随着时间的流逝,master 应该是主要负责保持种群同步的人。

minion 应该记住最近的 master 的 IP,并在启动时尝试单播到那个。

考虑按照这些行使用数据包格式:{magic_number、版本、start_time、num_minions、optional_list_of_minions}

minions 列表将包括 {ip_addr, time_of_last_transaction},如果列表不再适合某些有限大小的 UDP 数据包,则该列表将为空。 Minion 可以通过注意到 start_time 发生变化来检测 master 重启,并会在重启后很快重新连接。请注意随机抖动您的延迟计时器,这样我们就不会看到一群雷鸣般的爪牙。