# Mock GPS Simulator > 文档版本:v1.0 > 最后更新:2026-04-02 08:28:05 ## 启动 在仓库根目录运行: ```bash npm run mock-gps-sim ``` 启动后: - 新版工作台: `http://127.0.0.1:17865/` - 小程序定位模拟地址: `ws://127.0.0.1:17865/mock-gps` - 小程序心率模拟地址: `ws://127.0.0.1:17865/mock-hr` - 小程序调试日志地址: `ws://127.0.0.1:17865/debug-log` - 资源代理: `http://127.0.0.1:17865/proxy?url=` 补充说明: - 模拟器工作台内部现在会按当前页面地址自动推导 websocket 地址。 - 本地访问 `http://127.0.0.1:17865/` 时,会自动连接: - `ws://127.0.0.1:17865/mock-gps` - `ws://127.0.0.1:17865/mock-hr` - `ws://127.0.0.1:17865/debug-log` - 外网访问例如 `https://gs.gotomars.xyz/` 时,会自动连接同源: - `wss://gs.gotomars.xyz/mock-gps` - `wss://gs.gotomars.xyz/mock-hr` - `wss://gs.gotomars.xyz/debug-log` - 因此外网页面不能再把 `https://gs.gotomars.xyz/` 当作 websocket 地址手工填写;应直接使用对应的 `wss://...` 路径,或让工作台按同源自动连接。 ## 多通道联调 模拟器现在支持一个最小的多通道隔离方案: - GPS 模拟消息带 `channelId` - 心率模拟消息带 `channelId` - 调试日志消息带 `channelId` - 小程序端按同一个模拟通道号过滤三条链 默认通道号: ```text default ``` 如果需要多人并行联调,可以在模拟器工作台里把“模拟通道号”改成例如: ```text runner-a runner-b group-01 ``` 然后在小程序调试面板里把“模拟通道号”也配成同一个值。 当前“模拟通道号”位于工作台顶部,属于全局调试参数,不再归属某个单独分组。 ## 当前能力 - 直接载入 `game.json` - 自动解析 `map / mapmeta / course` - 自动切换自定义瓦片 - 自动渲染 KML 控制点 - 一键跳到开始点 / 结束点 / 任意检查点 - 地图点击跳点 - 实时连续发送 `mock_gps` - 路径编辑 - 上传轨迹文件回放(GPX / KML / GeoJSON) - 路径回放 - 速度、频率、精度调节 - 可选桥接到新实时网关 - 接收小程序侧 `debug-log` 调试日志 ## 调试日志 调试日志 websocket 独立地址: ```text ws://127.0.0.1:17865/debug-log ``` 发送消息格式: ```json { "type": "debug-log", "timestamp": 1712345678901, "channelId": "runner-a", "scope": "gps-logo", "level": "info", "message": "wx.getImageInfo success", "payload": { "src": "https://example.com/logo.png" } } ``` 当前 UI 会通过独立日志通道把这类消息显示到“调试日志”区域。 日志区域当前是: - 地图右下角浮层 - 可展开 / 缩小 - 支持按 `scope` 过滤 - 按当前 `channelId` 隔离显示 第一阶段主要用于承接: - `gps-logo` 后面可以继续扩到: - `compass` - `h5` - `content-card` - `heart-rate` ## 桥接到新网关 旧模拟器现在支持保留原有本地广播链路的同时,把数据旁路转发到新的 Go 实时网关。 默认行为: - 小程序定位模拟继续连接 `ws://127.0.0.1:17865/mock-gps` - 小程序心率模拟继续连接 `ws://127.0.0.1:17865/mock-hr` - 调试日志单独连接 `ws://127.0.0.1:17865/debug-log` - 页面里可以直接配置并启用新网关桥接 - 环境变量只作为服务启动时的默认值 ### 页面里直接配置 启动模拟器后,打开: ```text http://127.0.0.1:17865/ ``` 在“新网关桥接”区域可以直接配置: - 是否启用桥接 - 网关地址 - Producer Token - Channel ID - 目标 Device ID - Group ID - Source ID - Source Mode - 本地桥接预设 点“应用桥接配置”后立即生效,不需要重启模拟器。 预设说明: - 预设保存在浏览器本地存储 - 适合多人联调时快速切换 `deviceId / groupId / sourceId` - “套用预设”只会填入表单,不会自动提交到服务端 - 需要再点一次“应用桥接配置”才会真正切换运行时桥接目标 ### PowerShell 启动示例 在仓库根目录执行: ```powershell $env:MOCK_SIM_GATEWAY_ENABLED='1' $env:MOCK_SIM_GATEWAY_URL='ws://127.0.0.1:18080/ws' $env:MOCK_SIM_GATEWAY_TOKEN='dev-producer-token' $env:MOCK_SIM_GATEWAY_CHANNEL_ID='' $env:MOCK_SIM_GATEWAY_DEVICE_ID='child-001' $env:MOCK_SIM_GATEWAY_SOURCE_ID='mock-gps-sim-a' npm run mock-gps-sim ``` 如果你使用新网关管理台创建的 `channel`,则要这样填: ```powershell $env:MOCK_SIM_GATEWAY_ENABLED='1' $env:MOCK_SIM_GATEWAY_URL='ws://127.0.0.1:18080/ws' $env:MOCK_SIM_GATEWAY_TOKEN='' $env:MOCK_SIM_GATEWAY_CHANNEL_ID='' $env:MOCK_SIM_GATEWAY_DEVICE_ID='child-001' npm run mock-gps-sim ``` 说明: - 不填 `MOCK_SIM_GATEWAY_CHANNEL_ID` 时,旧模拟器走老的 `authenticate` 模式 - 填了 `MOCK_SIM_GATEWAY_CHANNEL_ID` 时,旧模拟器自动走 `join_channel` 模式 - 管理台里复制出来的 `producerToken` 只能和对应的 `channelId` 配套使用 ### 可用环境变量 - `MOCK_SIM_GATEWAY_ENABLED` - `1` 表示启用桥接 - `MOCK_SIM_GATEWAY_URL` - 新网关地址,默认 `ws://127.0.0.1:18080/ws` - `MOCK_SIM_GATEWAY_TOKEN` - Producer token,默认 `dev-producer-token` - `MOCK_SIM_GATEWAY_CHANNEL_ID` - 可选 channel id;填写后会改走 `join_channel` - `MOCK_SIM_GATEWAY_DEVICE_ID` - 转发目标 `deviceId`,默认 `child-001` - `MOCK_SIM_GATEWAY_GROUP_ID` - 可选 `groupId` - `MOCK_SIM_GATEWAY_SOURCE_ID` - source id,默认 `mock-gps-sim` - `MOCK_SIM_GATEWAY_SOURCE_MODE` - source mode,默认 `mock` - `MOCK_SIM_GATEWAY_RECONNECT_MS` - 断线重连间隔,默认 `3000` ### 桥接状态查看 启动后可查看: ```text http://127.0.0.1:17865/bridge-status ``` 桥接配置接口: ```text http://127.0.0.1:17865/bridge-config ``` 返回内容包含: - 是否启用桥接 - 是否已连上新网关 - 是否已认证 - 最近发送 topic - 已发送条数 - 丢弃条数 - 最近错误 ## 加载自己的地图 推荐方式: 1. 启动模拟器后,打开 `http://127.0.0.1:17865/` 2. 在“资源加载”里填自己的 `game.json` 地址 3. 点“载入配置” 模拟器会自动: - 读取 `map` 和 `mapmeta` - 切换到你的瓦片底图 - 读取 `course` - 渲染开始点、检查点、结束点 如果你不想走整套配置,也可以: - 直接填“瓦片模板”,例如 `https://host/tiles/{z}/{x}/{y}.webp` - 直接填 `KML URL` 路径回放也支持直接导入轨迹文件: - `GPX` - `KML` - `GeoJSON / JSON` 说明: - 配置和 KML 是通过本地代理拉取的,所以浏览器跨域问题会少很多 - 如果你的资源需要鉴权,第一版代理还没有加认证头透传 ## 真机调试注意 如果小程序跑在手机上,不要用 `127.0.0.1`。 把小程序里的 mock bridge 地址改成你电脑在局域网里的 IP,例如: ```text ws://192.168.1.23:17865/mock-gps ``` 心率模拟地址应配置为: ```text ws://192.168.1.23:17865/mock-hr ``` 同理,浏览器里的模拟器页面也建议用电脑局域网地址打开,例如: ```text http://192.168.1.23:17865/ ``` 如果你要在小程序里看调试日志,Logger 地址应配置为: ```text ws://192.168.1.23:17865/debug-log ```