协议概览
真遇的客户端与服务端共享同一份协议定义:以 Protobuf 描述、语言中立。它的设计目标是「两端不一起发版也能共存」,并在未来服务端公开发布后,成为第三方实现的参考。
分层
协议按关注点分层,每层是一组 message 与枚举:
| 层 | 作用 |
|---|---|
| 控制 | 版本握手与能力协商 |
| 身份 | 密钥对即身份;公钥分发 |
| 服务器 | 服务器信息、配置与寻址 |
| 活动 | 活动的创建、状态与报名 |
| 通信 | 公告与讨论区(内容为端到端密文) |
| 内容 | 媒体与回顾内容 |
| 连接 | 好友与共同在场 |
| 注册处 | 账号 / 资料 / 找回,以及公开组目录 |
| 迁移 | 数据导出与迁移 |
端到端加密的内容一律以不透明的
bytes表示,协议层不定义明文语义;服务器无从解读。
传输
- 主体:RPC over HTTP(S)。请求体为 Protobuf,
Content-Type: application/protobuf;以POST /rpc/{Method}调用。 - 推送:WebSocket 通道。用于服务端主动推送,不承载实时聊天(产品刻意压低实时性)。
- 认证:请求级签名自证。对
nonce‖timestamp‖请求体用 ed25519 签名,随请求头携带公钥与签名;无 token、无会话。详见故障排查。
兼容性铁律
- 字段只增不改:修改字段类型或名称、删除字段都属破坏性变更。
- 字段号不复用:删除字段时用
reserved声明,禁止回收旧号。 - 枚举只追加:不删除、不重排已有枚举值;零值固定为
*_UNSPECIFIED。 - 破坏性改动开新版本:确需重构时启用新包版本,旧版本保持不变,由版本握手协商,实现新旧共存。
- 能力协商:可选能力以位图声明,旧端忽略未知位。
第三方实现
正式的协议参考文档与 schema 将随服务端公开发布一并提供。届时第三方可在不复制、不重定义协议结构的前提下实现兼容的服务端或客户端。