# 实时网关 MVP 拆分 本文档用于把 `realtime-gateway` 第一阶段工作拆成可执行任务。 --- ## 1. 目标 第一阶段只解决以下问题: - 建立一个独立于现有模拟器的新 Go 网关工程 - 能接收 Producer 上报 - 能让 Consumer 按设备订阅 - 能转发位置和基础 telemetry - 能保存 latest state - 能提供最基础的健康检查和运行入口 --- ## 2. 任务拆分 ### 2.1 工程骨架 - 新建 `realtime-gateway/` - 初始化 `go.mod` - 建立 `cmd/` 和 `internal/` 结构 - 提供最小运行 README - 提供开发配置文件 ### 2.2 网络入口 - HTTP server - `/healthz` - `/metrics` - `/ws` - 优雅关闭 ### 2.3 会话管理 - 生成 `sessionId` - 维护连接生命周期 - 记录角色和订阅 - 断线清理 ### 2.4 协议处理 - `authenticate` - `subscribe` - `publish` - `snapshot` - 错误返回格式统一 ### 2.5 路由与 latest state - 按 `deviceId` 路由 - 支持 `groupId` 和 `topic` 过滤 - latest state 内存缓存 - `snapshot` 获取最新值 ### 2.6 轻鉴权 - Producer token - Controller token - Consumer token 或匿名策略 ### 2.7 基础观测 - JSON 日志 - 连接日志 - 发布日志 - 基础 metrics 占位接口 --- ## 3. 暂不进入 MVP - 规则引擎正式实现 - 通知分发正式实现 - Recorder 正式实现 - Replayer 正式实现 - Redis - 集群 - 数据库存档 - 高级限流 - 复杂 ACL --- ## 4. 建议开发顺序 1. 骨架与配置 2. HTTP 和 WebSocket 入口 3. 会话管理 4. 发布与订阅 5. latest state 6. 鉴权 7. 观察与日志 8. 插件总线占位 --- ## 5. 完成标准 满足以下条件可视为 MVP 跑通: - 可以启动一个独立 Go 服务 - 模拟 Producer 能发布 `telemetry.location` - Consumer 能订阅某个 `deviceId` - Consumer 能收到实时转发 - Consumer 可读取某个设备的 latest state - Producer、Controller、Consumer 的角色边界基本可用 --- ## 6. 下一阶段 MVP 跑通后优先做: 1. 插件总线正式化 2. Recorder 插件 3. 模拟器对接新协议 4. 简单规则插件 5. Dispatcher 插件