游戏定点重置问题
发布于 8 年前 作者 im-here 3797 次浏览 来自 问答

玩过游戏的都知道游戏里都有定点重置的功能,比如商店刷新,副本刷新什么的。最近在做手游服务端,做到公会这一块了,公会里的每个成员都有贡献度,贡献度是一个星期重置一次(即每周一0点重置)。想请教各位大神,我这块应该如何设计,我目前想到的方案有2种:

1.服务器上跑一个定时任务,到了重置时间执行重置命令。但是这样会有一个问题就是,当玩家数量庞大的时候(假如100万),重置的时候就要一次性更新100万条数据,不知道数据受不受得了啊。而且每次重置都是重置所有玩家,这里面肯定还有好多僵尸号。

2.每个玩家各自给一个变量,用来记录重置时间(实际上所有玩家这个时间都是一样的),然后玩家登录的时候我就比对这个时间,如果符合条件就重置。但是这就有一个问题就是,如果过了重置时间这个玩家没登录,那么在公会列表里别的玩家看到这个玩家的贡献度还是上周的数据(本应该是0,即重置后的数据才对)。

13 回复
  • 读和写分库
  • 为抗压,加mq

@i5ting 那也就是采用第一种方案了?mq是指消息队列吗?

一个星期对应一个表 From Noder

方案2 懒重置 把粒度提升为工会

首先方案一不可取,跑定时任务就相当与开了线程,在玩家数量达到一定数量会严重影响主线程。使用@i5ting 说的读写分库,然后在使用redis做一个mq应该不错,。第二种方案@kentkwan 说的以公会为粒度单位比较可取,同时利用redis做数据缓存。。。

还有一点 你考虑的玩家数是错误的 我们应该考虑的是峰值同时在线数 而不是注册玩家数 如果你说单服10万同时在线是不可能 所以你的结论也是不对的

应该是 message queue

@imhered 就是指的消息队列message queue

@kentkwan 明显这个方案啊 必须懒重置

回到顶部