网络游戏前后端时间同步

网络游戏中会涉及到多个终端,各个终端以及服务器的系统时间都会存在一定的差异。

如何在在游戏中处理好这种差异呢?

一 使用前端时间

直接获取终端的时间,用来计时,这种方式是很多单机游戏使用的方式。

这种方式时存在漏洞的,例如我们记录进入关卡的时间(客户端时间),然后开始计时,每10分钟恢复1点体力。

当我修改了我的客户端时间之后,体力的值也随之变化了。

即使在后端做了校验,前端显示也会有问题,体验并不好。

或者如果我前端的时间更快,前端显示我已经恢复了体力,但是发送到后端校验时缺失败了。

二 使用后端时间

另外一种方式时都使用后端时间,这又会有什么问题呢?

最明显的就是当前后端不在同一个时区的时,获取的时间并不一致。

另外就是后端的时间每次都去更新比较麻烦。

比如说我要显示倒计时,每次打开界面的时候都需要请求一次系统时间,

然后需要另外在开一个定时器,每秒做一次减一操作。

三 兼顾前后端时间

这是我们游戏最终才有的一种方法。

就是在登录的时候,请求一次系统时间,然后计算前后端时间的差值,

然后再获取前端时间的时候,加上这个差值。

这样就可以完美的解决一二中提到的问题。

但是这又会有另一个问题,当我登录游戏之后,然后将游戏进入后台,然后修改终端时间,

这又会出现一中提到的问题。

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

lua的代码如下:

-- 保存服务器对时间差
local timeDelta = 0 

-- 根据从服务器请求带的时间serverTime和本地时间os.time()计算出时间差serverTime
function setServerTime(serverTime)
    timeDelta = serverTime - os.time()
end

-- 返回本地时间加上时间差之后的时间
function getTime()
    return os.time() + timeDelta
end

时间: 2024-08-10 14:34:02

网络游戏前后端时间同步的相关文章

前后端分离的一些尝试

背景 目前使用SpringMVC框架进行开发,用户访问controller的url,controller收到页面数据后分发给serverice做处理,处理完后在controller中根据页面所需要的数据进行整合,最后将打包好的信息发给指定的页面. 根据上图我们可以看到,数据的整合是在controller层上做处理的,而页面则对整合的数据进行对应的显示,两部分需要对应好,如果增加一个对应的控件涉及到后台的数据,则页面和后端都需要修改,即使该空间的service已经存在,也需要在controller

利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境

前后端分离这个词一点都不新鲜,完全的前后端分离在岗位协作方面,前端不写任何后台,后台不写任何页面,双方通过接口传递数据完成软件的各个功能实现.此种情况下,前后端的项目都独立开发和独立部署,在开发期间有2个问题不可避免:第一是前端调用后台接口时的跨域问题(因为前后端分开部署):第二是前端脱离后台服务后无法独立运行.本文总结最近一个项目的工作经验,介绍利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境的实践过程,希望能对你有所帮助. 注:

前后端分离的方法

网站前后端分离的方法 如何进行前后端分离: http://blog.csdn.net/github_26672553/article/details/51864112 https://segmentfault.com/q/1010000004494530 解释了前后端的分离方法 http://www.csdn.net/article/2015-10-25/2826033

jsonp跨域访问servlet接口获取json数组,并且渲染数据,前后端完整

啊哈哈哈哈哈哈哈哈哈哈哈我太激动了~ 其实这个工作我一直在拖延啊,就觉得哇,好难啊,不想做欸= = 然后硬着头皮研究了一整个下午+晚上终于搞清楚了~~~~哇哈哈哈哈~~~好神奇哈哈哈哈哈~~~(疯了吧!) json.jsonp.jQuery Ajax这些东西说定义我也不是特别研究,只懂个大概,就不去复制百科了,没意思. 一.先说我要做的事情的需求,上来就撸代码估计很多人懵逼(就像今天下午的我一样- -||) 意图:本地服务端servlet生成json数据,我想在前端获取json数据并渲染成列表显

写给刚入门的前端工程师的前后端交互指南

转自原文 写给刚入门的前端工程师的前后端交互指南 作为刚接触前端的不久的童鞋,大家都会兴奋于CSS和JS所带来漂亮界面,然而,前端工程师除了UI重构外,还有非常重要的职责在正确的区域渲染出服务端的数据.毕竟,我们要构建一个大的web应用,必然不是普普通通的静态页面构成. 下文将罗列将来前端工程师应该必备的同后端打交道的常用技能. 服务端渲染 谈起服务端渲染,对于动态服务而言,这个世界上跑的大多数页面都经历过服务端的数据渲染,接口->前端赋值->模版渲染 .这一切都在服务器完成,我们查看源码时候

从Angular2路由引发的前后端路由浅谈

笔者的学习进度比较慢,直到两年以前写的网站都还是以服务端为主导的,即网站的所有视图都由服务器视图模板来渲染,笔者使用的是 DotNet MVC,开发套路就是在Controller里面写Action,在Views里写对应的Action.cshtml,使用ajax发起请求已经是比较前端的事情了.这种时候由于DotNet MVC框架继承的微软风格的懒人模式,甚至不需要去知道其路由是如何实现的,给人一种感觉是只要在浏览器里敲进去Controller名与Action名,就访问到视图了. 后来笔者开始使用n

[转]从MVC到前后端分离

从MVC到前后端分离 来源:csdn 发布时间:2015-10-26 阅读次数:1680 1. 理解MVC MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器. 其中,模型是用于封装数据的载体,例如,在Java中一般通过一个简单的POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的Java Bean,包含一系列的成员变量及其getter/setter方法.对于视图而言,它更加偏重于展现,也就是说,视图决定了界面

BugPhobia准备篇章:Beta阶段前后端接口文档

0x00:序言 Two strangers fell in love, Only one knows it wasn’t by chance. To the searching tags, you may well fall in love with http:// 10.2.26.67 Github地址:Beta阶段前后端接口定义说明.md 版本管理 修改记录 V1.0 Beta阶段前后端接口文档一稿整理完成,记录用户.标签(含推荐).搜索和问答部分的主要接口 0x01 :接口定义说明 接口定

前后端分离

Swagger - 前后端分离后的契约 前后端分离 按照现在的趋势,前后端分离几乎已经是业界对开发和部署方式所达成的一种共识.所谓的前后端分离,并不是传统行业中的按部门划分,一部分人只做前端(HTML/CSS/JavaScript等等),另一部分人只做后端(或者叫服务端),因为这种方式是不工作的:比如很多团队采取了后端的模板技术(JSP, FreeMarker, ERB等等),前端的开发和调试需要一个后台Web容器的支持,从而无法将前后端开发和部署做到真正的分离. 通常,前后端分别有着自己的开发