Crequency / KitX

An all-purpose toolbox app that connect everything.

Home Page:https://kitx.apps.crequency.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Rules] On the optimization of self-discovery ad hoc networks

StardustSeemsInk opened this issue · comments

🪦 Is your feature request related to a problem? Please describe.

原先每秒进行一次udp发包的自发现方式有一点浪费,且可能为日后kitx的大规模任务场景留下隐患。

🪧 Describe the solution you'd like

将发包逻辑改为:

  • 启动时(以及用户手动发起发包指令时)进行一定时长的udp广播
  • 一定时间无回应,将自己作为主控
  • 新设备出现并广播自己时,予以udp回应,并完成入网程序

🧾 Describe alternatives you've considered

  • 由组网中的主控设备持续发包,负责“介绍人”工作;从控仅通过tcp与主控链接

📎 Additional context

  • 为用户提供手动重试按钮,规避可能发生的组网失败的问题。
  • 由用户指定入网设备

延伸思路:
我们也许可以提供多种模式来完成自发现

  1. 持续广播模式, 即现有广播模式
  2. 介绍人模式, 即 @StardustSeemsInk#217 提到的方式
  3. 村口广播模式, 即主控持续广播本机消息, 加入组网的设备不广播, 新设备自行加入主控组网

于 2023.5.27 更新 (From QQ Group)
可用的详细思路:
介绍人找朋友模式 (主控为介绍人)

  1. 请求阶段
    • 连续发送若干个广播包请求主机, 观察是否有主控回应
  2. 连接阶段
    • 主控回应了从控的请求 (发送 ip 地址等信息) , 从控连接
  3. 建立阶段
    • 没有主控回应, 自己建立主控
    • 等待阶段
      • 观察广播包是否有新的自组网请求

此模式具体的好处为:

  1. 仅在从控自组网时才会有网络请求的产生
  2. ... 待补充

一般的内网,设备很少变化,所以可以整个上一次的连接历史,提高连接速度(这点特别适合虚拟机-实体机组网)
启动时阅读连接历史,尝试连接这些设备。连接错误或连接过程不要报出来
这个功能可以设置开启或关闭供用户选择

可用的详细思路: 介绍人模式 (主控为介绍人)

  1. 请求阶段

    • 连续发送若干个广播包请求主机, 观察是否有主控回应
  2. 连接阶段

    • 主控回应了从控的请求 (发送 ip 地址等信息) , 从控连接
  3. 建立阶段

    • 没有主控回应, 自己建立主控

    • 等待阶段

      • 观察广播包是否有新的自组网请求

此模式具体的好处为:

  1. 仅在从控自组网时才会有网络请求的产生
  2. ... 待补充

一般的内网,设备很少变化,所以可以整个上一次的连接历史,提高连接速度(这点特别适合虚拟机-实体机组网) 启动时阅读连接历史,尝试连接这些设备。连接错误或连接过程不要报出来 这个功能可以设置开启或关闭供用户选择

好主意

Tracked by #223 .

Tracked by #224 .

延伸思路: 我们也许可以提供多种模式来完成自发现

  1. 持续广播模式, 即现有广播模式
  2. 介绍人模式, 即 @StardustSeemsInk[Rules] On the optimization of self-discovery ad hoc networks #217 提到的方式
  3. 村口广播模式, 即主控持续广播本机消息, 加入组网的设备不广播, 新设备自行加入主控组网

我更加倾向于重写成 3 的模式
即: 启动时监听 udp 广播 5s, 若有收到主控的广播消息直接加入主控网络 (比较建立时间, 加入建立时间最早的主控网络), 若超出此段时间仍未收到主控广播消息, 则认为本机为局域网络第一个设备, 建立主控网络并开始广播主控广播消息, 在此期间, 持续监听是否有其他设备的主控广播消息, 若存在则比较主控网络建立时间, 后建立主控网络的设备自行关闭主控网络.

另外, #202 可以合并到此 issue, 有关同步设备时间的问题