Skip to content

分布式软总线

分布式软总线是鸿蒙分布式能力的底层核心,实现设备间自动发现与通信。


1. 分布式软总线概述

1.1 核心概念

分布式软总线 = 鸿蒙设备间的"虚拟总线"

功能:
├─ 设备自动发现
├─ 设备间通信(TCP/UDP/广播)
├─ 数据同步
├─ 服务发现
└─ 安全认证

特点:
├─ 多协议自适应(WiFi/蓝牙/NFC)
├─ 低延迟(毫秒级发现)
├─ 高安全(端到端加密)
└─ 无需手动配对(自动发现)

1.2 网络架构

设备 A(手机)                      设备 B(平板)
┌──────────────┐                  ┌──────────────┐
│  应用层       │                  │  应用层       │
│ KV-Store     │◄── 数据同步 ──► │ KV-Store     │
│ 分布式数据库  │◄── 数据同步 ──► │ 分布式数据库  │
│ 分布式相册    │◄── 共享    ──► │ 分布式相册    │
├──────────────┤                  ├──────────────┤
│  软总线层    │                  │  软总线层    │
│ 发现/连接/同步│                  │ 发现/连接/同步│
├──────────────┤                  ├──────────────┤
│  协议层      │                  │  协议层      │
│ WiFi/蓝牙/NFC│                  │ WiFi/蓝牙/NFC│
└──────────────┘                  └──────────────┘
            ════════ 分布式软总线 ════════

2. 设备发现

2.1 发现附近设备

typescript
import { deviceManager } from '@kit.DeviceManagerKit'

// 创建设备发现对象
let deviceFinder = deviceManager.createDeviceFinder()

// 发现策略
let strategy = {
    networkTypes: [
        deviceManager.NetworkType.WIFI,
        deviceManager.NetworkType.BLUETOOTH
    ],
    timeout: 30000  // 发现超时(毫秒)
}

// 开始发现
deviceFinder.on('deviceFound', (device: deviceManager.DeviceInfo) => {
    console.log('发现设备:', device.deviceId, device.deviceName)
    this.nearbyDevices.push(device)
})

deviceFinder.on('deviceLost', (device: deviceManager.DeviceInfo) => {
    console.log('设备离线:', device.deviceId)
})

deviceFinder.on('findDeviceEnd', () => {
    console.log('发现完成')
})

// 开始发现
deviceFinder.startDeviceDiscovery(strategy)

// 停止发现
deviceFinder.stopDeviceDiscovery()

2.2 设备信息

typescript
interface DeviceInfo {
    deviceId: string      // 设备 ID
    deviceName: string    // 设备名称
    deviceType: string    // 设备类型(phone/tablet/...)
    networkType: string   // 网络类型
    isOnline: boolean     // 在线状态
    capabilities: string[] // 支持的能力
    securityLevel: number // 安全等级
}

3. 设备间连接

3.1 建立连接

typescript
import { connection } from '@kit.NetworkKit'

// 连接到目标设备
let connectOption: connection.ConnectOption = {
    deviceId: 'target_device_id',
    networkType: connection.NetworkType.WIFI,
    timeout: 5000
}

let channel = await connection.createChannel(connectOption)

channel.on('stateChange', (state: connection.ConnectState) => {
    switch (state) {
        case connection.ConnectState.CONNECTED:
            console.log('连接成功')
            break
        case connection.ConnectState.DISCONNECTED:
            console.log('连接断开')
            break
    }
})

3.2 数据传输

typescript
// 发送数据
let data = new TextEncoder().encode('Hello from another device')
await channel.send(data)

// 接收数据
channel.on('message', (data: ArrayBuffer) => {
    let message = new TextDecoder().decode(data)
    console.log('收到:', message)
})

4. 设备认证

4.1 安全认证流程

设备 A                    设备 B
  │                        │
  ├── 发现设备 ──────────► │
  │                        │
  ├── 发起认证 ─────────►  │
  │   (挑战-应答)          │
  │                        │
  │◄── 认证结果 ──────────│
  │   (成功/失败)          │
  │                        │
  ├── 建立加密通道 ───────► │
  │                        │
typescript
// 设备认证
let authResult = await deviceManager.authenticateDevice({
    deviceId: 'target_device_id',
    authType: deviceManager.AuthType.SECURE
})

if (authResult.success) {
    console.log('设备认证通过')
    // 建立连接
} else {
    console.error('认证失败:', authResult.errorCode)
}

5. 面试高频考点

Q1: 分布式软总线的作用?

回答:设备间自动发现、连接、通信的基础设施。支持 WiFi/蓝牙/NFC,多协议自适应,毫秒级发现。

Q2: 设备发现流程?

回答:创建 DeviceFinder → startDeviceDiscovery → 监听 deviceFound/deviceLost → stopDeviceDiscovery。


🐱 小猫提示:分布式软总线记住 "底层基础设施、自动发现、多协议、设备间通信"。这是鸿蒙分布式能力的根基。