# softbus_transport **路径:** `src/softbus_transport` **构建目标:** `softbus_transport`(STATIC 库) **层级:** L2 服务层 ## 1. 概述 `softbus_transport` 实现边缘与守护进程之间的 **TCP 传输层**,定义 UplinkWire JSON 行协议,提供 Server(守护进程监听)与 Client(边缘连接)对称实现。 ## 2. CONSTRAINTS - 传输层仅负责 TCP 连接管理与线消息编解码,不包含业务解析逻辑。 - 消息格式遵循 [UPLINK_WIRE_PROTOCOL.md](UPLINK_WIRE_PROTOCOL.md),不得引入私有扩展字段而不更新协议文档。 - Server 与 Client 均基于 asio 异步 I/O,不得阻塞调用线程。 - 传输层不得直接操作 OPC UA 或插件。 ## 3. 核心组件 ### 3.1 UplinkWire — 线协议 | 类型/函数 | 说明 | |-----------|------| | `WireMessageType` | 枚举:`RawPacket`、`ExecuteCommand`、`Unknown` | | `WireMessage` | 解码结果联合体 | | `encodeWireMessage(RawPacket)` | 上行编码 | | `encodeWireMessage(ExecuteCommand)` | 下行编码 | | `decodeWireMessage(line)` | 单行解码 | | `base64Encode` / `base64Decode` | payload 编解码 | ### 3.2 TcpUplinkServer — 守护进程侧 | 方法 | 说明 | |------|------| | `TcpUplinkServer(io_context, host, port)` | 构造,绑定监听地址 | | `start()` | 启动 acceptor | | `stop()` | 停止服务 | | `setRawPacketHandler(handler)` | 注册上行回调 `function` | | `sendCommand(ExecuteCommand)` | 向已连接边缘发送下行命令 | **行为:** - 监听 TCP 端口,接受边缘连接 - 按 `\n` 分行读取,解码 `rawPacket` 消息 - 触发 `rawHandler` 回调 - 通过 `sendCommand` 向边缘推送 `executeCommand` ### 3.3 TcpUplinkClient — 边缘侧 | 方法 | 说明 | |------|------| | `TcpUplinkClient(io_context, host, port)` | 构造,指定守护进程地址 | | `connect()` | 连接守护进程 | | `disconnect()` | 断开连接 | | `sendRawPacket(RawPacket)` | 发送上行原始包 | | `poll()` | 轮询接收下行命令 | | `setCommandHandler(handler)` | 注册命令回调 `function` | ## 4. 数据流 ### 4.1 上行 ``` Edge: UplinkClient.sendRawPacket(packet) → encodeWireMessage(packet) + "\n" → TCP send → Server: handleLine(line) → decodeWireMessage(line) → rawHandler(rawPacket) ``` ### 4.2 下行 ``` Daemon: CommandDispatcher.dispatch(cmd) → TcpUplinkServer.sendCommand(cmd) → encodeWireMessage(cmd) + "\n" → TCP send → Client: handleLine(line) → decodeWireMessage(line) → commandHandler(cmd) ``` ## 5. 配置 | 配置项 | 来源 | 默认值 | |--------|------|--------| | `uplink.listenHost` | `daemon_profile.json` | `127.0.0.1` | | `uplink.listenPort` | `daemon_profile.json` | `9000` | | Edge 连接地址 | CLI `--daemon host:port` | `127.0.0.1:9000` | ## 6. 依赖 - `softbus_core`(RawPacket) - `softbus_api`(ExecuteCommand) - `asio`(FetchContent standalone,v1.30.2) - **被依赖:** softbus_edge, softbus_daemon ## 7. 构建 ```cmake add_library(softbus_transport STATIC ...) target_link_libraries(softbus_transport PUBLIC softbus_core softbus_api asio) ``` ## 8. Phase 2 规划 - 支持多边缘连接与连接池 - 增加断线重连与心跳机制 - 可选迁移至 SBUP 二进制协议