服务器开发过程中关于计时器的处理

来源:互联网 发布:淘宝商家服务 编辑:程序博客网 时间:2024/06/06 02:12

简介

游戏服务器开发过程中经常会需要使用计时器来触发相应的事件,这篇文章主要是将什么时候需要使用计时器,什么不是不需要使用计时器,以及对于用一个例子来说明一些关于计时器的处理。

需求描述

我需要开发一个活动,该活动分为三个阶段,第一阶段为早上十点到下午六点,该阶段玩家可以每隔两个小时领取一项物品;第二阶段为下午六点到下午八点,该阶段玩家可以贡献物品,全服贡献的物品数量会影响下一个阶段玩家获得奖励的品质。第三个阶段为下午八点到第二天下午六点,该阶段玩家可以根据全服贡献的物品数量领取奖励,该阶段与第二天的第一阶段有所重合,但互不影响。

第一阶段:玩家领取免费物品

刚进入第一阶段,没有什么需要系统进行处理的需求,因为前一天领取的物品可以累加到第二天,那么我们就没有必要使用计时器来触发第一阶段的开始,只需要在玩家尝试领取免费物品的时候判断时间是否符合第一阶段即可。每隔两个小时的限制也可以通过记录玩家上一次的领取时间来进行检查。

第二阶段 玩家贡献物品

该阶段的开始实际上是第三阶段的结束,而第三阶段结束时需要清空前一天全服玩家贡献的物品。所以这里需要一个计时器来进行触发,这里我们需要引入一个问题,如果该计时器触发的时间点服务器不在运行,那怎么办?
我们可以根据上一次清空物品贡献的时间来进行处理,如果该时间戳小于今天下午六点,就说明今天的清空贡献物品还没有执行,反之,则已经执行。所以,我们只可以假设该计时器触发代码执行是在当天下午六点之后的(游戏服务器中的请求一般是异步执行的,所以异步执行也可能会导致真正的执行时间会晚于下午六点)。
当玩家贡献物品时,我们不只要检测时间是否在下午六点到下午八点之间,还需要检测之前的贡献物品有没有清空,如果没有清空,则拒绝玩家贡献物品。因为清空贡献物品的时间是可能晚于下午六点的,如果在这之前就运行玩家贡献物品,可能会导致今天刚刚贡献的物品被错误清除。

第三阶段

该阶段,玩家可以领取物品,进入该阶段也就是第二阶段结束时不需要做额外的工作,所有可以在玩家请求领取的时候进行时间检查,不需要计时器。

总结

  • 如果前一阶段结束与当前阶段开始系统都不需要进行数据处理,那么就没有必要使用计时器
  • 服务器程序正在更新或者停止运行,会导致计时器没有正常触发,所以在服务器启动时要检测上次的计时器有没有正常触发,作出相应的补救
  • 上一点以及代码的异步执行都有可能导致计时器触发代码的执行时间晚于标准时间,代码中要注意对这种情况进行处理
1 0
原创粉丝点击