Files
cmr-mini/doc/debug/模拟器多通道联调最小方案.md

149 lines
2.5 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.
# 模拟器多通道联调最小方案
> 文档版本v1.0
> 最后更新2026-04-02 08:28:05
## 目标
在不引入房间系统、不增加复杂编排的前提下,让同一台本地模拟器服务能够同时承接多路联调数据,并保证不同联调对象之间的数据不串线。
## 方案
统一增加一个字段:
- `channelId`
三条链都带这个字段:
- `mock-gps`
- `mock-hr`
- `debug-log`
## 设计原则
- 不做 room / participant 管理
- 不做多人控制台编排
- 只解决“数据隔离”
- GPS、心率、日志三条链统一使用同一个模拟通道号
## 默认值
默认通道号:
```json
"default"
```
空值、缺失值都归一化成:
```json
"default"
```
## 消息格式
### GPS
```json
{
"type": "mock_gps",
"timestamp": 1712345678901,
"channelId": "runner-a",
"lat": 31.2304,
"lon": 121.4737,
"accuracyMeters": 6,
"speedMps": 2.4,
"headingDeg": 92
}
```
### 心率
```json
{
"type": "mock_heart_rate",
"timestamp": 1712345678901,
"channelId": "runner-a",
"bpm": 148
}
```
### 调试日志
```json
{
"type": "debug-log",
"timestamp": 1712345678901,
"channelId": "runner-a",
"scope": "gps-logo",
"level": "info",
"message": "logo ready",
"payload": {
"src": "https://example.com/logo.png"
}
}
```
## 模拟器侧
新版工作台提供一个统一输入:
- `模拟通道号`
它会同时作用于:
- GPS 发送
- 心率发送
- 日志过滤
也就是说,一个模拟器页面实例默认对应一个通道。
当前这个输入已经提升到工作台顶部,作为全局调试参数,不再挂在“定位发送”分组下面。
## 小程序侧
调试面板提供一个统一输入:
- `模拟通道号`
保存后会同步给:
- 定位模拟接收过滤
- 心率模拟接收过滤
- logger 发送通道
“一键连接开发调试源”会带上当前通道号一起生效。
## 接收规则
接收端统一按归一化后的 `channelId` 精确匹配:
- 收到的消息 `channelId` 与当前模拟通道号一致才消费
- 不一致直接忽略
缺失 `channelId` 的旧消息,按 `default` 处理。
## 适用场景
- 两台手机同时接同一台本地模拟器服务
- 一个调试人员同时开多台模拟器页面
- 同时联调多个儿童设备
## 当前边界
这套最小方案只解决:
- 多路数据隔离
不解决:
- 房间管理
- 成员列表
- 批量启动/停止
- 同步起跑
- 多控制台协作
如果后面真的需要这些,再升级到房间模型。