sproto 添加版本号
明明需求都做完了,硬要拉着人家去公司加班,真是变态 ToT
最近想推动一下协议版本号的事,版本号不一致的禁止登录。理论上,只要改了某条协议的定义,而客户端因为各种原因没有更新到协议文件,就有可能导致协议解析出错,服务器拿到异常数据。因为 sproto 的定义是放在 spb 文件里,而不是在网络字节流中,所以拿到数据后用不一致的 schema 去解开,真是无法预期会拿到什么,如果还直接拿这个数据去存盘了,就更危险而难以修复了
之前没有出过问题,可能是客户端更新机制做得比较健壮。客户端上线先拉取版本号,如果拉取失败就不允许上线,拉取后版本号不一致也不允许上线,必须完整更新后才能上线。这就保证了前后端协议定义的一致性。也有可能是逻辑写得比较复杂,并不直接存盘请求数据,而是用配置表和玩家状态对请求做了一定的校验,最后再保存玩家状态。当然,也可能是需求很少迭代,对外的功能要么没啥收入,渐渐被废弃掉,要么比较能赚钱,策划也不敢改。。。顶多往上层层垒新功能。客户端没有新增协议一般只会没法使用新功能,不至影响数据安全性
QC 同学对这个比较抵触,他们担心开发期协议改动比较频繁,而客户端内网打 patch 总是比服务器更新要频繁的,只要有不兼容修改(改字段、删协议、改协议号、改字段编号),那就登不上服务器。在 QC 同学的期望里,应该只有外网包才打协议版本,内网即使打也不超过一天一次。他们也提到能不能将协议版本定细一点,比如每个协议都有一个版本,双方收到协议时先校验版本,不一致就不解析。内网的需求之前是客户端同学提的,觉得内网很多报错都是因为协议没有更到最新,所以协议不一致就不应该能登录,或者报错的时候多给个提示说协议有问题。看起来一个 namespace 一个版本号也可以?