连接建立与状态

连接建立的三件事

连接建立时要做三件事:

  1. 校验用户身份:登录用户或游客身份。
  2. 校验进入房间权限:是否有权进入该直播间。
  3. 记录连接映射:连接 ↔ 用户 / 房间的关系。

连接建立流程

客户端发起 WebSocket 连接
01 · 判断

校验用户身份

登录 / 游客
02 · 判断

校验进入房间权限

房态、黑名单、禁言
03 · 动作

记录连接映射

connection → user / room
04 · 结果

订阅房间消息

开始接收广播
连接就绪,可收发消息

连接状态存哪

连接状态通常保存在网关内存里:

connection_id -> user_id, room_id, device_id, connected_at
room_id -> connection_id 列表
  • 这些状态变化很快(进进出出),不适合每次写数据库。
  • 数据库只保留关键事件和审计记录(如登录、进入房间的日志)。

为什么用内存

  • 连接状态读写频率极高,内存最快。
  • 不落库 → 无 IO 压力 → 网关轻量。
  • 代价:网关重启会丢连接状态 → 客户端需要重连(心跳章节处理)。

连接与房间的映射

  • 每个连接要知道自己属于哪个房间(用于推送)。
  • 每个房间要知道有哪些连接(用于广播)。
  • 多设备:同一用户可以有多条连接(手机 + 电脑)。

映射数据是广播的基础:房间消息要能找到所有该房间的连接。

一句话

连接建立的本质是「确认身份 + 校验权限 + 记录映射」。连接状态放内存、事件落库,是实时系统的基本取舍。

下一节看长连接的保活与断线重连。

发现内容有问题?

告诉我们哪里需要改进。