一个简单的游戏服务端架构
由于需要对外作个简单的服务端架构展示,故使用Keynote画了此架构图。
由于需要对外作个简单的服务端架构展示,故使用Keynote画了此架构图。
场景:
在我们游戏逻辑中,游戏数据均保存在Redis中,基本逻辑均在Redis内部使用Lua Script编写,并返回给外部程序相应数据。在数据传递过程中,使用了MsgPack数据格式传递比较复杂的数据结构。
功能:
统计玩家角色拥有各种装备数量
预想:
返回数据的格式,预想的是返回map,key:装备原型ID(number),value:拥有数量(number),将此map进行MsgPack编码后返回给外部程序。
问题:
在某些情况下,外部程序始终不能正确解码出返回的MsgPack格式数据。
分析结果:
由于我们静态数据中装备原型ID是从1开始,那么当玩家角色拥有装备的原型ID刚好是从1开始而有序的时候(Lua中均是table类型表示Array和Map,Array索引从1开始),MsgPack编码是就会把此种情况的数据当作是Array来编码,那么外部程序需要解码成Map就会不成功,除此之外的问题均无问题。
可选方案:
我的方案:固定以一个length为2的Array传出数据,元素类型:MsgPack格式的string。