房间与事件
事件模型
Matrix 中的每个操作都是一个事件。事件在每个房间内形成有向无环图(DAG)。
事件类型
事件结构
房间生命周期
创建
房间创建从 creation_content.type 中提取类型以支持:
- 普通房间(默认)
- 空间(
m.space)
状态事件
状态事件具有 state_key,表示房间的当前状态。只有具有给定 (type, state_key) 对的最新事件才被视为"当前"。
成员关系
m.room.member 事件跟踪用户成员状态:
成员变更会触发:
- 设备列表变更通知(
/sync中的device_lists.changed) - 房间成员计数更新
- 权限级别重算
事件关系
事件可以通过 m.relates_to 相互关联:
关系持久化在 event_relations 表中,通过 /relations API 查询。
事件撤回
撤回会移除事件内容,同时保留事件包装器。被撤回的事件保留其 event_id、room_id、sender 和 type,但内容被清空,仅保留每种事件类型的白名单字段。
空间层级
空间是 creation_content.type = "m.space" 的房间。子房间通过 m.space.child 状态事件关联。层级 API 遍历此树以返回房间结构:
层级遍历具有循环安全性,并进行权限过滤(只返回请求者可见的房间)。