外观
Project 02 — Real-time Server
项目目标
构建可连接 Vue / Three.js 客户端的实时服务,通过 Redis 与 WebSocket 完成状态共享、消息广播和多客户端通信。
启动阶段:Phase 05 — Redis
完成阶段:Phase 06 — Real-time
当前状态:未开始
在完成 Redis 基础前不创建项目代码;项目应复用此前学到的 HTTP、Context、错误处理和测试能力。
Phase 05 里程碑 — Redis 数据能力
- 使用 Redis 保存 Session 和短期设备状态
- 为缓存设置合理 TTL,并定义缓存未命中行为
- 使用 Hash 或其他合适的数据结构表达设备状态
- 使用 Pub/Sub 完成最小消息发布与订阅演示
- 明确 PostgreSQL 与 Redis 的数据职责
验收标准
- 能够写入、读取、过期并更新设备状态
- Redis 不可用时返回明确错误,不静默丢失数据
- Key 命名、TTL 和序列化格式有文档说明
- 自动测试覆盖缓存命中、未命中和过期场景
Phase 06 里程碑 — WebSocket 实时通信
- 实现 WebSocket 连接建立、鉴权和关闭流程
- 定义消息 envelope、类型和错误格式
- 实现心跳、空闲超时和 graceful close
- 支持广播、Room 和多个并发客户端
- 使用 Redis Pub/Sub 支持跨进程消息分发
- 记录连接数、消息数和异常断开等基础指标
验收标准
- 多个客户端能够加入 Room 并接收广播
- 断开的连接会及时清理,不持续占用 goroutine
- 慢客户端不会阻塞整个广播链路
- 服务关闭时主动结束连接并释放资源
- 并发相关测试通过
go test -race ./...
暂不包含
- 大规模集群调优
- Kafka 或其他消息队列
- 跨地域消息同步
- 客户端 UI 实现