Openharmony 开源鸿蒙北向开发——分布式软总线技术——1.介绍

发布于:2025-03-18 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、问题

        我们在使用电子设备的时候,经常遇到的情况,多个设备之间想要共享数据,发现会非常麻烦。比如说两个手机传送文件,需要连接网络,需要登录软件,需要选择文件,需要发送,想想就累。

        再麻烦一点,我家里有智能家居,我当然希望我回到家,所有的设备可以直接连接上我的手机,我可以随时获取他们的信息,然后可以发送,设定数据给所有的电器。但我不希望我回到家后,花上半个小时一个个连接。

        你说你不怕麻烦?

        OK,那假设你的智能手表不具有WiFi功能,只有蓝牙,而你的电脑没有蓝牙功能。

        请问他们之间如何传输数据?

        这个时候也简单,我们的手机蓝牙和wifi不是都有吗?

        那么我们可以手动的,用手机从手表取出数据,发送给电脑。

        嗯,累不累?

二、解决方法

        这咋办呢?有没有一个方法,可以让我的设备之间自己组网,自己进行数据交互,还可以兼容各种不同的设备,各种通信形式?

        有的,有的。

        这就是分布式软总线技术。

三、分布式软总线技术介绍

        分布式软总线技术,顾名思义,分布式的软的总线。我们挨个拆解

        3.1、什么是总线?

                其实这个概念是从计算机中引入的,计算机中有很多的设备,需要进行数据通信和任务通信,为了解决这个问题,于是就出现了总线技术。

                总线就像计算机内部的 “超级高速公路”,专门负责让 CPU、存储器、各种控制器(如键盘控制器、硬盘控制卡等)之间顺畅沟通。在下图中

                图里的 CMOS 存储器、显示器控制卡、USB 控制卡等设备,都靠这三条 “路” 和 CPU 连接,就像城市里的建筑通过公路、交通信号系统协作,最终让计算机各部件高效配合,进行数据通信,完成各种任务。

        3.2、什么是软总线?

                计算机中的总线是电路搭建起来的硬件电路。

                而软总线通过软件代码、协议算法构建 “虚拟通道”,不依赖计算机硬件总线那样固定的物理电路(如主板上的地址线、数据线等硬件线路),也无需设备统一物理接口,这是 “软” 的核心体现。

3.3、什么是分布式?

        可以看到计算机总线中,所有的数据都是流向CPU,或者从CPU流出,此时,CPU就是中心设备。而分布式的意思是,所有的设备等级平行,数据可以通过这条总线总线在任意两条设备之间流动。

四、实现原理

        假设我们有A,B,C,D,E五个设备

        其中A,B,C支持wifi与蓝牙,D只有wifi,E只有蓝牙,且E连接C。

        此时所有的设备都在一个局域网下。

        如何让他们自行组网呢?

        那么主要有以下几个过程

4.1、设备发现

1. 多协议广播发现

        - A/B/C 设备:
                同时开启蓝牙广播(BLE)和WiFi UDP 广播,发送包含设备 ID、IP 地址、支持协议(WiFi/BT)的数据包。
        - D 设备:
                 仅通过 WiFi 发送 UDP 广播,携带自身 IP 和 “仅支持 WiFi” 标识。
        - E 设备:
                仅通过蓝牙广播设备 ID 和 “仅支持蓝牙” 标识。

2.连接信息存储

           每个设备维护一个本地设备目录,记录自身支持的协议能发现的所有设备的 ID、IP、协议类型等信息。
        例如:D 的本地目录中没有 E 的信息,因为 D 无法接收蓝牙广播。

3. 核心设备选择

        动态选举主节点:
                 A/B/C 中选择一个作为主节点(如 A),负责维护全局设备列表和各个设备的信息。
                 选举依据:CPU 性能、电量、网络稳定性(如优先选择 A,因 A 已连接 E)。

4.2、设备连接

        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)需先连接到桥接设备
                - 桥接设备向主节点注册协议转换能力
当然,上述过程均由分布式软总线技术实现,无需人工干预,我们只需要在手机上点击即可。

五、相关代码

分布式软中线代码仓库地址如下:

  1. communication_interfaces_kits_softbuskit_lite

https://gitee.com/openharmony/communication_interfaces_kits_softbuskit_lite

  1. communication_services_softbus_lite

https://gitee.com/openharmony/communication_services_softbus_lite

为省去篇幅,本篇暂时不讲代码,下一篇开启代码以及测试教程。

六、总结

        6.1、结构分层

        这个过程中,我们将整个网络可以分为三:应用层,网络层,链路层

其中每一层的功能如下

 应用层(你直接用的功能)

  1. 就像你手机里的「文件传输」APP 或「智能家居控制」界面
  2. 你点一下「传文件」或「开空调」,这就是应用层在工作
  3. 它只关心「要传什么」和「要控制什么」,不关心怎么传过去

网络层(幕后的快递调度中心)

  1. 类似快递公司的总调度室
  2. 当你要从手机传文件到电脑(不管是蓝牙还是 WiFi),它会:
  3. 就像你网购时,快递系统自动帮你选顺丰陆运还是空运

链路层(具体的运输道路)

  1. 就像现实中的高速公路、乡村土路等不同道路类型
  2. 决定数据用什么「交通工具」传输:
    • 蓝牙:适合短距离、低功耗的「电动车」(比如传照片到智能手表)
    • WiFi:适合中距离、高速的「卡车」(比如传视频到电视)
    • 未来可能支持的 5G/zigbee 等,就是更高级的「高铁」「飞机」
  3. 这些道路可以同时存在,系统会根据情况自动切换

举个例子

你用手机给空调发指令「制冷」:

  1. 应用层:你在 APP 点「制冷」
  2. 网络层:自动找到空调的位置,发现空调只支持 WiFi,而手机同时有 WiFi 和蓝牙,于是规划路径:手机 WiFi→路由器→空调 WiFi
  3. 链路层:数据通过 WiFi「卡车」运输,中间不需要你操作蓝牙或连热点

6.2、技术特点

如此我们便实现所需的需求,即满足设备的数据之间共享。

其技术主要有以下特点

本文为本人查阅资料后编写,才疏学浅,如有错误,请提出宝贵意见,即可更改。

参考资料

1.https://www.cnblogs.com/rxwest/p/14290923.html

2.华为开发者文章


网站公告

今日签到

点亮在社区的每一天
去签到