1.直接连接
- 当其中一个设备(如 B)需要与另一个设备(如 C)进行数据交互时,B 根据本地设备目录中记录的 C 的 IP 地址,通过 WiFi 网络向 C 发起 TCP 或 UDP 连接请求。例如,如果是文件传输可能使用 TCP 协议保证数据的可靠传输;如果是实时性要求高的音视频流传输可能使用 UDP 协议减少延迟。
2.跨协议设备间的连接
- D 需要与 E 进行数据交互时,由于 D 的本地设备目录中没有 E 的信息(D不支持蓝牙),但 D 知道主节点 A 的信息(因为在设备发现阶段 D 发现了 A)。D 根据本地目录中记录的 A 的 IP 地址,通过 WiFi 网络向 A 发送数据交互请求,请求中包含目标设备 E 的 ID。
- 主节点处理:主节点 A 接收到 D 的请求后,在其维护的全局设备列表中查找 E 的信息,发现 E 是仅支持蓝牙的设备。
- 信息查询:主节点 A 接收到 D 的请求后,在其维护的全局设备列表中查找 E 的信息,得知 E 已通过蓝牙连接到 C。
- 路径规划:A 根据网络状况和设备状态,规划出 D 与 E 之间的通信路径,即 D→A→C→E。
- 这里要注意,任何一种跨协议的数据传输都需要经过A,因为主节点 A 是唯一掌握全局设备列表和协议转换能力的节点,无主节点参与时,设备无法识别跨协议目标。
4.3、数据交互
1.直接连接
- 数据传输:连接建立成功后,B 将数据封装成符合对应协议格式的数据包,通过 WiFi 网络发送给 C,C 接收到数据包后进行解包和处理。
2.跨协议设备间的连接
- D 到 A:D 将需要传输的数据封装成符合 WiFi 协议格式的数据包,通过 WiFi 网络发送给 A。
- A 到 C:主节点 A 接收到 D 发送的数据包后,对其进行解析,然后根据 C 的 IP 地址(或其他标识信息),将数据重新封装成适合在网络中传输的格式,通过 WiFi 网络发送给 C。
- C 到 E:C 接收到 A 发送的数据后,将其从 WiFi 协议格式转换为蓝牙协议格式,再通过之前建立的蓝牙连接将数据包发送给 E。
4.4、设备退出
1、主动退出流程
当设备要主动退出网络时,需按以下步骤操作:
1.发送退出通知
- 具备多协议的设备(A/B/C):会同时借助蓝牙和 WiFi 这两种方式,广播带有自身 ID 的退出消息。
- 仅支持 WiFi 的设备(D):通过 UDP 广播发送退出通知。
- 仅支持蓝牙的设备(E):利用蓝牙广播宣告退出。
2.主节点处理
- 主节点(例如 A)在接收到设备的退出通知后,会从全局设备列表中将该设备的信息删除。
- 主节点会立即生成一个包含更新后信息的新的全局设备列表。
3.全网同步
- 主节点通过多协议广播的形式,把更新后的全局设备列表发送给所有在线的设备。
- 其他设备收到新的全局设备列表后,会对各自的本地设备目录进行更新。
4.断开连接
- 所有与退出设备有直接连接的设备,会主动关闭相关的 TCP/UDP 连接或者蓝牙连接。
- 举例来说,如果 D 之前和 C 有连接,那么 D 会主动断开与 C 的 WiFi 连接。
2、异常退出处理
当设备出现异常退出情况(如断电、网络突然中断)时,按以下方式处理:
1.检测异常
- 主节点会定期对设备进行存活检测,比如通过发送心跳包。
- 当设备在规定的时间内(例如 30 秒)没有响应心跳包时,就会被判定为异常退出。
2.触发主动退出流程
- 主节点会模拟设备主动退出的流程,从全局设备列表中删除该设备,并将更新后的列表同步给其他设备。
3.跨协议连接调整
- 若 E 原本通过 C 连接到网络,而 C 异常退出,那么 E 需要重新搜索可连接的蓝牙设备,如 A 或 B。
- E 成功连接到新的设备后,新的设备会将 E 的信息上报给主节点,主节点会更新全局设备列表。
3、主节点退出特殊流程
当主节点(如 A)退出网络时,会触发以下操作:
1.启动新主节点选举
- 剩余的 A/B/C 设备会依据之前设定的选举依据(如 CPU 性能、电量、网络稳定性),重新选举出一个新的主节点,例如 B。
- 新主节点会生成一个全新的全局设备列表。
2.跨协议通信恢复
- 新主节点会重新建立与其他设备的连接,以确保跨协议通信能够正常进行。
- 例如,D 需要通过新主节点 B 与 E 进行通信。
3.旧主节点资源释放
- 所有设备会主动删除与旧主节点(A)相关的连接信息。
4.4、新加入设备
1. 新设备广播
- 协议匹配:新设备根据自身支持的协议(WiFi/BT)发送广播
双协议设备:同时发送 BLE 广播和 WiFi UDP 广播
单协议设备:仅发送对应协议广播
- 广播内容:设备 ID、支持的协议类型、IP 地址(WiFi 设备)、设备能力参数(如 CPU 性能、电量等)
2. 现有设备发现
- 多协议监听:
- A/B/C 设备同时接收蓝牙和 WiFi 广播
- D 设备仅接收 WiFi 广播
- E 设备仅接收蓝牙广播
- 信息初步存储:
- 各设备将发现的新设备信息暂存到本地临时目录
- 例如:D 发现新设备 F(WiFi),会记录 F 的 IP 和协议类型
3. 主节点信息收集
- 主动上报:
- 所有设备(包括新设备)在发现新节点后,立即向主节点 A 发送更新请求
- 新设备 F 会主动向主节点 A 发送自身完整信息
- 信息验证:
- 主节点 A 通过多源数据校验(如对比 WiFi 和蓝牙广播的 ID 一致性)
- 验证新设备的协议支持情况和网络可达性
4. 全局设备列表更新
- 主节点处理:
-.将新设备 F 加入全局设备列表
-.记录其协议类型、IP 地址、设备能力参数
-.标记设备状态(如是否支持协议转换)
- 信息同步:
- 主节点 A 通过 WiFi 多播向全网设备发送更新通知
- 各设备根据更新内容同步本地目录
- 例如:E 设备通过 C 的蓝牙连接获取新设备信息
5. 主节点重新选举(可选)
- 触发条件:
- 新设备 F 的 CPU 性能 / 电量 / 网络稳定性优于当前主节点 A
- 主节点 A 主动发起选举(如检测到自身资源不足)
- 选举过程:
主节点 A 广播选举请求
所有候选设备(A/B/C/F)上报自身参数
全网设备投票选出最优设备
新主节点初始化全局设备列表
6. 连接建立与路径更新
- 直接连接:
- 同类协议设备可直接建立连接(如 F 与 D 通过 WiFi 连接)
- 双协议设备优先选择最优协议连接(如 F 与 C 优先用 WiFi)
- 跨协议路径更新:
- 主节点 A 根据新设备位置重新规划路径
- 例如:新增 F→A→C→E 的传输路径
- 旧有路径(如 D→A→C→E)保持可用
7. 网络优化
- 负载均衡:
- 主节点 A 根据设备负载动态分配流量
- 例如:若 F 的 WiFi 带宽更高,将部分 D→C 的流量转移到 F
- 冗余路径:
- 自动生成备用路径(如 F→B→C→E)
当主路径故障时自动切换
特殊场景处理
1.仅蓝牙设备加入:
- 必须通过现有蓝牙节点(如 C/E)间接接入
- 主节点 A 通过 C 的蓝牙连接获取该设备信息
2.多主节点冲突:
- 通过设备 ID 哈希值进行冲突检测
- 哈希值较小的设备自动降级为从节点
3.协议扩展:
- 新增协议设备(如 ZigBee)需先连接到桥接设备
- 桥接设备向主节点注册协议转换能力
当然,上述过程均由分布式软总线技术实现,无需人工干预,我们只需要在手机上点击即可。
五、相关代码