4.7 KiB
title | type | weight |
---|---|---|
房间版本 | docs | 60 |
{{< boxes/warning >}} 本页面的翻译未经核对,可能存在翻译质量不佳、错翻、漏翻等情况。您可以在 Forgejo 存储库 打开 Issue、提交 Pull Request 或邮件联系我们提出改进建议和参与翻译与核对。 {{< /boxes/warning >}}
房间是 Matrix 运行的核心,并对其内容有严格的规则限制。房间还可以拥有处理不同任务的各种算法,例如当两个或多个事件在底层 DAG 结构中发生冲突时的处理方式。为了便于通过新算法或新规则对房间功能进行改进,Matrix 采用“房间版本”来管理每个房间的一组预期行为。根据需要分配新的房间版本。
房间版本之间没有隐式排序或层级关系,并且一旦被纳入规范,其原则不可更改。尽管有一组推荐使用的版本,有些房间可能会受益于其他版本所引入的功能。房间可通过“升级”至所需版本,在不同版本间切换。由于版本不具备排序或层级特性,这意味着房间完全可以从版本 2 “升级”到版本 1,只要有此需求。
功能矩阵
某些功能仅在特定房间版本中可用,比如 knocking(敲门加入)。下表展示了不同版本从客户端视角支持哪些功能。服务器实现同样可以参考该表,但实际开发中,往往会更关心各版本的详细规范。
功能 \ 版本 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
Knocking(敲门加入) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ |
受限加入规则 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ | ✔ | ✔ | ✔ |
knock_restricted 加入规则 |
❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ | ✔ |
房间版本完整列表
房间版本分为两大类:稳定版(stable)和非稳定版(unstable)。稳定房间版本可安全用于房间创建。非稳定版本则包括所有未在规范中列出或因其他原因被标记为不稳定的版本。各版本状态可能因多种原因(如发现安全漏洞、版本老化等)而定期在稳定与非稳定之间切换。
如果房间已在运行稳定版本,客户端不应要求房间管理员升级房间。服务器在新建房间时,强烈建议默认使用房间版本 11。
可选房间版本如下:
- 版本 1 - 稳定。初始房间版本。
- 版本 2 - 稳定。实现了 State Resolution Version 2(状态解析版本 2)。
- 版本 3 - 稳定。引入事件 ID 即事件哈希值的机制。
- 版本 4 - 稳定。基于 v3 ,事件 ID 使用 URL 安全的 base64 编码。
- 版本 5 - 稳定。引入对签名密钥有效期的强制校验。
- 版本 6 - 稳定。修改了多项事件授权规则。
- 版本 7 - 稳定。新增 knocking 功能。
- 版本 8 - 稳定。添加新加入规则,允许其他房间成员无需邀请即可加入。
- 版本 9 - 稳定。基于 v8,修复了撤回部分成员事件时的问题。
- 版本 10 - 稳定。仅允许权限等级为整数,并新增
knock_restricted
加入规则。 - 版本 11 - 稳定。进一步明确撤回(redaction)算法。
房间版本语法规范
房间版本用于指定房间属性的变更,这些属性可能无法与其他服务器兼容。例如,更改事件授权规则可能导致旧服务器因无法理解新规则而出现分裂脑(split-brain)状态。
一个房间版本被定义为不超过 32 个码点的字符串。房间版本不能为空,且只能包含字符 a-z
、0-9
、.
和 -
。
房间版本号不应被解析,应视为不透明的标识符。仅包含 0-9
和 .
的房间版本号,保留给未来 Matrix 协议使用。
合法房间版本的完整语法为:
room_version = 1*room_version_char
room_version_char = DIGIT
/ %x61-7A ; a-z
/ "-" / "."
合法房间版本示例:
1
(将由 Matrix 协议保留)1.2
(将由 Matrix 协议保留)1.2-beta
com.example.version