这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
连接建立与状态
连接建立的三件事
连接建立时要做三件事:
- 校验用户身份:登录用户或游客身份。
- 校验进入房间权限:是否有权进入该直播间。
- 记录连接映射:连接 ↔ 用户 / 房间的关系。
连接建立流程
客户端发起 WebSocket 连接
01 · 判断
校验用户身份
登录 / 游客02 · 判断
校验进入房间权限
房态、黑名单、禁言03 · 动作
记录连接映射
connection → user / room04 · 结果
订阅房间消息
开始接收广播连接状态存哪
连接状态通常保存在网关内存里:
connection_id -> user_id, room_id, device_id, connected_at
room_id -> connection_id 列表
- 这些状态变化很快(进进出出),不适合每次写数据库。
- 数据库只保留关键事件和审计记录(如登录、进入房间的日志)。
为什么用内存
- 连接状态读写频率极高,内存最快。
- 不落库 → 无 IO 压力 → 网关轻量。
- 代价:网关重启会丢连接状态 → 客户端需要重连(心跳章节处理)。
连接与房间的映射
- 每个连接要知道自己属于哪个房间(用于推送)。
- 每个房间要知道有哪些连接(用于广播)。
- 多设备:同一用户可以有多条连接(手机 + 电脑)。
映射数据是广播的基础:房间消息要能找到所有该房间的连接。
一句话
连接建立的本质是「确认身份 + 校验权限 + 记录映射」。连接状态放内存、事件落库,是实时系统的基本取舍。
下一节看长连接的保活与断线重连。
发现内容有问题?
告诉我们哪里需要改进。
