Files
softbus_OPC/docs/softbus_transport.md
2026-06-09 17:27:24 +08:00

111 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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<void(RawPacket)>` |
| `sendCommand(ExecuteCommand)` | 向已连接边缘发送下行命令 |
**行为:**
- 监听 TCP 端口,接受边缘连接
-`\n` 分行读取,解码 `rawPacket` 消息
- 触发 `rawHandler` 回调
- 通过 `sendCommand` 向边缘推送 `executeCommand`
### 3.3 TcpUplinkClient — 边缘侧
| 方法 | 说明 |
|------|------|
| `TcpUplinkClient(io_context, host, port)` | 构造,指定守护进程地址 |
| `connect()` | 连接守护进程 |
| `disconnect()` | 断开连接 |
| `sendRawPacket(RawPacket)` | 发送上行原始包 |
| `poll()` | 轮询接收下行命令 |
| `setCommandHandler(handler)` | 注册命令回调 `function<void(ExecuteCommand)>` |
## 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 standalonev1.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 二进制协议