网络游戏前后端时间同步
来源:互联网 发布:淘宝满减怎么用 编辑:程序博客网 时间:2024/04/29 06:33
网络游戏中会涉及到多个终端,各个终端以及服务器的系统时间都会存在一定的差异。
如何在在游戏中处理好这种差异呢?
一 使用前端时间
直接获取终端的时间,用来计时,这种方式是很多单机游戏使用的方式。
这种方式时存在漏洞的,例如我们记录进入关卡的时间(客户端时间),然后开始计时,每10分钟恢复1点体力。
当我修改了我的客户端时间之后,体力的值也随之变化了。
即使在后端做了校验,前端显示也会有问题,体验并不好。
或者如果我前端的时间更快,前端显示我已经恢复了体力,但是发送到后端校验时缺失败了。
二 使用后端时间
另外一种方式时都使用后端时间,这又会有什么问题呢?
最明显的就是当前后端不在同一个时区的时,获取的时间并不一致。
另外就是后端的时间每次都去更新比较麻烦。
比如说我要显示倒计时,每次打开界面的时候都需要请求一次系统时间,
然后需要另外在开一个定时器,每秒做一次减一操作。
三 兼顾前后端时间
这是我们游戏最终才有的一种方法。
就是在登录的时候,请求一次系统时间,然后计算前后端时间的差值,
然后再获取前端时间的时候,加上这个差值。
这样就可以完美的解决一二中提到的问题。
但是这又会有另一个问题,当我登录游戏之后,然后将游戏进入后台,然后修改终端时间,
这又会出现一中提到的问题。
我们的解决方法是在从后台进入前台时,重新请求一次后台时间,计算时间差。
如何在在游戏中处理好这种差异呢?
一 使用前端时间
直接获取终端的时间,用来计时,这种方式是很多单机游戏使用的方式。
这种方式时存在漏洞的,例如我们记录进入关卡的时间(客户端时间),然后开始计时,每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
- 网络游戏前后端时间同步
- 【网络游戏专题】时间同步装置
- 网络游戏中的(低精度)时间同步
- 网络游戏同步
- 网络游戏同步
- 网络游戏同步
- 网络游戏同步
- 网络游戏同步
- 网络游戏同步
- 网络游戏同步
- 小谈网络游戏同步
- 再谈网络游戏同步
- 网络游戏同步法则
- 网络游戏同步之1
- 网络游戏同步之1
- 网络游戏同步的原理
- 网络游戏的位置同步
- 网络游戏的位置同步
- 重温Java知识(四)
- 坑,Chromium里threaded parsing导致sub resource loader不止一个路径
- svn用法和功能介绍
- 用MyEclipse整合SSH框架-讲给菜鸟同学
- servlet接口及原理解析,表达式语言解析
- 网络游戏前后端时间同步
- after install ubuntu14.04 64bit , the wifi can't work issue.resolved.
- jQuery实现旋转转盘抽奖代码
- 首页信息显示,网站优化(缓存,静态)
- 使用php编写约瑟夫环问题
- [经典面试题]排序数组中绝对值最小元素
- crt客户端访问一段时间之后不能登陆了
- 哎死速度阿斯顿
- POJ 3026 Borg Maze