网络游戏前后端时间同步

来源:互联网 发布:淘宝满减怎么用 编辑:程序博客网 时间:2024/04/29 06:33
网络游戏中会涉及到多个终端,各个终端以及服务器的系统时间都会存在一定的差异。
如何在在游戏中处理好这种差异呢?


一 使用前端时间
直接获取终端的时间,用来计时,这种方式是很多单机游戏使用的方式。
这种方式时存在漏洞的,例如我们记录进入关卡的时间(客户端时间),然后开始计时,每10分钟恢复1点体力。
当我修改了我的客户端时间之后,体力的值也随之变化了。
即使在后端做了校验,前端显示也会有问题,体验并不好。
或者如果我前端的时间更快,前端显示我已经恢复了体力,但是发送到后端校验时缺失败了。


二 使用后端时间
另外一种方式时都使用后端时间,这又会有什么问题呢?
最明显的就是当前后端不在同一个时区的时,获取的时间并不一致。
另外就是后端的时间每次都去更新比较麻烦。
比如说我要显示倒计时,每次打开界面的时候都需要请求一次系统时间,
然后需要另外在开一个定时器,每秒做一次减一操作。


三 兼顾前后端时间
这是我们游戏最终才有的一种方法。
就是在登录的时候,请求一次系统时间,然后计算前后端时间的差值,
然后再获取前端时间的时候,加上这个差值。


这样就可以完美的解决一二中提到的问题。
但是这又会有另一个问题,当我登录游戏之后,然后将游戏进入后台,然后修改终端时间,
这又会出现一中提到的问题。


我们的解决方法是在从后台进入前台时,重新请求一次后台时间,计算时间差。


lua的代码如下:


-- 保存服务器对时间差local timeDelta = 0 -- 根据从服务器请求带的时间serverTime和本地时间os.time()计算出时间差serverTimefunction setServerTime(serverTime)    timeDelta = serverTime - os.time()end-- 返回本地时间加上时间差之后的时间function getTime()    return os.time() + timeDeltaend




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ucl语言班没过怎么办 西澳大学工程挂科怎么办 澳洲语言班没过怎么办2018 杨浦区对口公立小学太差怎么办 公立小学太差了怎么办 澳大利亚出国留学怎么办-语言课程 学校不给释放信怎么办 重修费交不起钱怎么办 不想用家里的钱怎么办 三本学费太贵怎么办 从日本往中国汇款怎么办 学费钱大一没交怎么办 初中孩子和同学相处不好怎么办 使用假护照出国被发现怎么办 酒店忘记退房了怎么办 语言课申请不上怎么办 学会计的应届生想转行怎么办 上班熬不下去了怎么办 墨大选修挂科怎么办 日本签证年收入没有10w怎么办 做生意的办房贷没有薪资流水怎么办 澳洲医保卡丢了怎么办 澳洲爱他美上火怎么办 学信网学籍在籍没交学费怎么办 宝宝从床上摔下来怎么办 狗没打针被咬了怎么办 狗咬了没破皮没出血怎么办 被宠物狗咬了出血了怎么办 让狗咬了下红了怎么办 狗牙齿碰到红了怎么办 加拿大学生签背景调查了怎么办 gpa不到3该怎么办英国 内地学生赴港签证怎么办 学生去日本旅游签证怎么办 澳洲未婚妻签需要单身证明怎么办 高院收到申诉材料怎么办? 辞职出国留学后社保怎么办 高三数学40来分怎么办 论文查重表格内容重复怎么办 榕树叶子掉光了怎么办 2017江苏高考2c怎么办