WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议
使用 WebSocket 具有高实时性、低资源占用的特性
因此协议选用 WebSocket 作为消息传递的主要协议之一
服务端需要在 /websocket
的路由下应答客户端
该信道为且只为消息传输信道,文件资源传输需要使用 http
客户端发起 101 http 请求升级协议到 websocket 时应携带客户端与服务端约定的安全密钥
携带方式为 token
参数,如 https://server.catkatpowered.com/message?token=1234567890
服务端对此 token 进行鉴权,若不通过则拒绝握手
// token 鉴权部分尚未完成,仍需商议
强制使用带有 ssl 的 wss 协议,默认情况下使用一次一密的自生成证书,如需暴露在外网下建议使用受信任的证书而非自生成证书
本协议中,通常情况下一串完整的 json 被称之为数据包
所有数据包都应继承基础数据包以便进行统一
通过定义数据包的键值对,可以表达大部分所需数据
这里将数据包分为以下四个类型
数据包类型 | 描述 | 相关讨论 |
---|---|---|
基础数据包 | 实现最基础功能 | |
描述数据包 | 描述服务端、IM 连接桥、插件等信息 | |
消息数据包 | 表达 IM 的消息,是其他协议中的 事件(Event) | |
凭据数据包 | 提供用于以 http 协议获取资源的凭据(Token) | |
自定义数据包 | 由 IM 桥或插件提供的独有的数据格式 |
此处类型是一层逻辑分类,并非实际意义上有被分配键值对属性的数据包