同步
/sync 端点是客户端接收新事件和维护客户端状态的主要机制。
GET /sync
参数
响应结构
流令牌
流令牌是不透明字符串,编码了事件流中的位置。用于:
- 增量同步:
since参数从之前的位置恢复 - 分页:
/messages和/context使用from/to令牌 - 间隙检测:
timeline.limited = true表示事件丢失(客户端应重新同步)
令牌是 (room_id, stream_ordering) 元组的 base64 编码。
长轮询
当 timeout > 0 时,服务器会保持连接打开直到:
- 有新事件到达
- 超时到期
- 需要发送心跳
这减少了客户端轮询频率和延迟。
过滤器
过滤器控制 /sync 中出现哪些事件:
过滤器可以通过 POST /filter 保存并按 ID 引用。
临时事件
临时事件不会长期持久化,但会包含在 /sync 中:
账户数据
账户数据事件是用户特定的,包含在每次同步响应中:
设备列表
当用户加入、退出或被封禁时,设备列表变更通知系统会触发 /sync 响应中的 device_lists.changed / device_lists.left 条目。这允许端到端加密客户端跟踪需要加密的设备。