本文主要是介绍游戏中线上已有功能迭代的兼容问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在游戏开发过程中,难免会有对线上已有功能进行迭代优化的需求。站在后端的角度来看,难点在于,如何在保证不会影响到用户的前提下,顺利进行对功能的升级和优化。关键在于兼容。
兼容分为功能配置、代码、用户数据和接口的兼容性。
一般来说,优先考虑的是新的代码能够兼容老的配置、老的用户数据和老的接口,这样能保证用户数据和旧版本的客户端也能正常使用。
如果是服务器是停服升级,那么只需要考虑新代码兼容老的用户数据便可。
如果服务器使用的是滚动升级,需要考虑的问题就比较多了,在前者基础上,还要考虑老代码对新的用户数据、新的配置和新的接口的兼容性,因为滚动升级过程中,玩家有可能会在已更新的服务器和未更新的服务器上来回切换。因此,在实际开发中,兼容性问题往往需要在开发功能的迭代部分时就考虑到,优先功能的实现,再对不能兼容的进行取舍。
配置方面,考虑是使用 JSON 的情况下,字段可以直接新增,如果要修改或删除字段,最好是新增一份配置,使得新配置和老配置共存。等到线上全局更新完之后,旧配置才可以废弃。
用户数据方面,一般来说用户数据都是需要保留的,特别是付费的活动。所以对于用户数据而言,兼容是最为重要的。如果没办法新老数据直接兼容?需要采取别的手段,例如把新数据存储在另外一张表,并在功能的迭代内容上线时,通过代码把旧数据转换成新数据,后续新代码直接使用新数据。
接口方面,如果前后端使用的是 Protobuf,则会有以下注意事项:
- 只能删除 optional 的字段,且字段序号后面不能再使用。一般来说字段可以保留不同,但不建议删除字段。
- 新增字段只能新增 optional、repeat 类型或者具有默认值的字段。
- 字段名称可以修改,但是字段序号不能修改,数据类型也只能升级,例如 int32 升级为 int64。
如果功能实现上无法做到兼容,那么可能就要找关掉旧功能一段时间,等完全更新好线上服务器后,再开启迭代后的功能,并同步旧数据到新数据。
这篇关于游戏中线上已有功能迭代的兼容问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!