网游服务器端设计思考:时间服务(一)序言

    网络游戏服务器端对于时间的需求很多,有些需求依赖于相对时间,比如开始采矿——需要随后几秒时间让客户端播动作。有些需求依赖绝对时间,比如只在2012年12月21日开启“末日之旅”的活动。正是由于有众多需求对时间有依赖性,使得时间服务、时间控制成为服务器端模块设计中较为重要的一部份。本系列将从游戏开发需求出发,循序渐进的介绍时间服务模块的设计和实现。

    Attention:本文措辞比较调侃、夸张,非少数民族程序员请在父母陪同下观看:-) 壮族小伙本文简称“小伙”

 

Scene 1

    话说公元某年某月某日,帝都一个阳光明媚的早上,策划A笑眯眯的跑过来道“少年!我们想在4月1日愚人节开启一个活动,所有玩家发放+15的装备,但活动只开放一天。我们只能在每周二维护的时候更新资源,现在这活动只开一天,中间不能停服更新资源,能不能帮在程序里自动判断,如果是4月1日才开放相应的功能?”。小伙想都没想回一句:“没问题,轻轻松松!”。于是拉上客户端的同学,让他在编辑器上加上填日期对话框,为了节省导出的字段,最后将所填日期最终导出为一个int型,表示距离1970.01.01的秒数。服务器直接使用这个秒数值和当前时间进行比较。就这样把按具体的按时间段开放的功能加上了。

    程序提交后过了几个小时,策划A又跑过来,问道:“新加的这个按时间段开启功能,怎么在欧洲服不管用呢?”。小伙debug一下程序,郁闷了“holy sh*t!没有考虑时区!”,赶紧和客户端同学商量,加入时区的计算,没多久就把bug修复了。把程序提交,签退下班,小伙迎着晚霞,走在通向地铁站的小路上,想想今天的工作多么有意义,心里也美滋滋的。

 

Scene 2

    又是一个阳光明媚的早上,策划C笑盈盈的过来了:“少年!上次那个时间段开启功能很给力,我们现在希望能更灵活一些,比如每周几到周几开启活动,每天的几点到几点开启活动,每个月的几号到几号开启活动,这个能做吗?”。最后这句“能做吗”是小伙的死穴,小伙心想这不是看不起我嘛!头也没抬就答应了。

    小伙琢磨着,只要加上个标志标识所填的数据是每天、每周还是每月,然后取当前时间的tm结构出来进行比较就可以了。顿时心里美滋滋的。

 

Scene 3

    还是一个阳光明媚的早上,策划A跑过来:“少年!那个每周、每天、每月的功能,用起来相当顺手。现在有两个需求:第一个是每个月的3号到15号之间,每天14点至20点开启活动A。第二个是每周五至周日,每天20点到23点开启活动B。”听完描述,小伙:“&……%#*!)(*&¥……,让我考虑一下!”,心想这么恶心的需求。

    再想想,其实就是把之前写的每月、每天、每周组合一下,同时满足条件是才成立,修改了一下原来的接口,没多久就做完了。心里美滋滋的。

 

Scene 4

    阳光明媚的早上,小伙有不祥的预感,屁股还没做热。策划A和策划C悄悄跑过来,道:“少年!看你骨骼惊奇,这么多诡异的需求都解决了,也不在乎再多一个”说完用笔在纸上写了一行字,小伙接过纸一看,顿时嘴里一股咸味涌上来,一口血差点喷出去。原来这次的需求是“2011年至2012年每个月的5号~14号之间,每天8点到15点之间的每小时里5分钟到25分钟的时间里,刷一些特殊怪,而且这一天必须是周五、周六或者周日”。小伙忍无可忍,说:“哥虽然是少数民族,但不是从那美克星来的!”。经验老道的策划A又开口了:“少年!这么有难度的需求只有你能做了”。唉,经不起表扬也是小伙死穴,不自量力的小伙还是想尝试一下,最终答应了。

    虽然需求很变态,但出于好奇,小伙最终还是花了很长时间做了一个通用时间服务、时间控制模块………

 

 

声明:文中所提到的故事均是本人瞎编乱造,并不是真人真事,如有雷同纯属巧合!

posted @ 2012-02-13 23:26  ychellboy  阅读(2200)  评论(1编辑  收藏  举报