Skip to content

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 实现