手游行业是否已经形成较强的学习与经验曲线

为了能够更快的帮助网友解决“”相关的提问中国广告知道网通过互联网大数据对“”相关的解决方案进行了整理,用户详细提问包括:与之相关的答案,具体解决方案如丅:

详细问题描述及疑问:期待您的答案我不知道说什么才好,除了谢谢 !

这里数据IO是指游戏数据存盘和读取


假设IO处理不好。server在IO时会导致游戏卡顿较长的时间,严重影响游戏体验


近期服务端刚好对IO这一块做了优化,把优化过程记录一下

剛開始立项的时候,仅仅是做了一个Demo加上也刚開始做服务端,仅仅是做了一个仅仅可以測试用的server


当时是在每一个场景对象area中加入了一個users对象,通过uid来保存每一个玩家的数据
当玩家登录的时候,将玩家的数据读入退出的时候将玩家的数据写回。

为了防止server宕机数据丢失再添加了一个定时存盘。

这样做有两个非常明显的问题:

1 假设一个玩家下线之后马上又一次登录就会又一次IO的过程;

2 每次都须要将所囿玩家的数据写入。玩家多了之后会卡非常长时间

为了解决如上问题,添加了一个cache


玩家离线后。先将其数据移到cache中每隔一段时间,將cache中的玩家写入存储介质中


登录的时候先在cache中查找玩家的数据,假设找不到再去读数据。


然后结构就变成了这样:

然而前面两个问題并没有彻底地解决掉。


1 假设玩家下线之后刚好onTick时间到,这样数据就被写回了下次登录就得又一次读一次;
2 若是在onTick这个周期内下线的玩家太多。onTick之中还是会有非常多玩具须要写入

为了优化前面的两点,不再玩家的数据移到cache而是在cache中保存玩家的下次存盘时间。

每次登錄直接在users中找数据假设找不到,就读数据库


假设玩家下线。就将其下次存盘时间在变为对应的负数来标记玩家已经下线。


在onTick中先將到存盘时间的玩家存盘,然后已下线的玩家从users和cache中同一时候移除

这种结构定时存盘一批玩家数据,即使玩家离线也能够在内存中保存┅段时间

眼下我们的服务端存盘机制就是这种,假设以后有优化再补充

我要回帖

 

随机推荐