状态同步和帧同步个人理解

一、同步

所谓同步,就是要多个客户端表现效果是一致的,例如我们玩王者荣耀的时候,需要十个玩家的屏幕显示的英雄位置完全相同、技能释放角度、释放时间完全相同,这个就是同步。就好像很多个人一起跳街舞齐舞,每个人的动作都要保持一致。而对于大多数游戏,不仅客户端的表现要一致,而且需要客户端和服务端的数据是一致的。所以,同步是一个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。

二、状态同步和帧同步的区别

最大的区别就是战斗核心逻辑写在哪,状态同步的战斗逻辑在服务端,帧同步的战斗逻辑在客户端。战斗逻辑是包括技能逻辑、普攻、属性、伤害、移动、AI、检测、碰撞等等的一系列内容,这常常也被视为游戏开发过程中最难的部分。由于核心逻辑必须知道一个场景中的所有实体情况,所以MMO游戏(例如魔兽世界)就必须把战斗逻辑写在服务端,所以MMO游戏必须是状态同步的,因为MMO游戏的客户端承载有限,并不能把整张地图的实体全部展现出来(例如100米以外的NPC和玩家就不显示了),所以客户端没有足够的信息计算全图的人的所有行为。

具体到客户端和服务端通信上,在状态同步下,客户端更像是一个服务端数据的表现层,举个例子,一个英雄的几乎所有属性(例如血量、攻击、防御、攻速、魔法值等等)都是服务端传给客户端的,而且在属性发生改变的时候,服务端需要实时告诉客户端哪些属性改变了,客户端并不能改变这些属性,而是服务端传来多少属性就显示多少属性(虽然可以改变客户端数值达到表现上的效果,例如无限血量,但是服务端那边的血量属性为0时,一样要死)。再举个例子,一个英雄要释放一个非指向性技能(例如伊泽瑞尔的Q),具体的过程就是,客户端通知服务端“我要释放一个技能”-》服务端通知客户端“在某地以什么方向释放某技能”-》客户端根据这些信息创建一个特效放在某地,然后以某个方向飞行-》服务端根据碰撞检测逻辑判断到某个时刻,这个技能碰到了敌方英雄,通知客户端-》客户端根据服务端信息,删除特效,被打的英雄减血同时播放受击特效。

而在帧同步下,通信就比较简单了,服务端只转发操作,不做任何逻辑处理。以下图为例:

现在同一局里有4个玩家,也就是4个客户端,这时客户端A释放了一个技能x,此时将操作传递给服务端,服务端不做任何判断,直接把A的操作全部分发给ABCD,则ABCD同时让客户端A控制的英雄释放技能x。

三、流量

状态同步比帧同步流量消耗大,例如一个复杂游戏的英雄属性可能有100多条,每次改变都要同步一次属性,这个消耗是巨大的,而帧同步不需要同步属性;例如释放一个技能,服务端需要通知客户端很多条消息(必须是分步的,不然功能做不了),而帧同步就只需要转发一次操作就行了。

四、回放&观战

帧同步的回放&观战比状态同步好做得多,因为只需要保存每局所有人的操作就好了,而状态同步的回放&观战,需要有一个回放&观战服务器,当一局战斗打响,战斗服务器在给客户端发送消息的同时,还需要把这些消息发给放&观战服务器,回放&观战服务器做储存,如果有其他客户端请求回放或者观战,则回放&观战服务器把储存起来的消息按时间发给客户端。

五、安全性

状态同步的安全性比帧同步高很多,因为状态同步的所有逻辑和数值都是在服务端的,如果想作弊,就必须攻击服务器,而攻击服务器的难度比更改自己客户端数据的难度高得多,而且更容易被追踪,被追踪到了还会有极高的法律风险。而帧同步因为所有数据全部在客户端,所以解析客户端的数据之后,就可以轻松达到自己想要的效果,例如moba类游戏的全图挂,吃鸡游戏的透视挂,都是没办法防止的,而更改数据达到胜利的作弊方式(例如更改自己的英雄攻击力)可以通过服务器比对同局其他人的战斗结果来预防。

六、服务器压力

状态同步服务器压力比较大,因为要做更多运算。

七、开发效率

首先要说,状态同步的游戏占主流,其次就是状态同步开发起来比较难。而帧同步服务器开发难度低,同一套方案可以给很多不同类型的游戏使用,反正都是转发操作;减少了服务端客户端沟通,老实说,没有扯皮的时间,开发效率最起码提高20%,状态同步的方案下,同一个功能至少需要一个客户端和服务端共同完成;PVP和PVE基本用的是同一套代码,做完PVP很容易就可以做单机的PVE。

八、使用帧同步的知名游戏

王者荣耀、魔兽争霸3、所有格斗类游戏

九、断线重连

状态同步的断线重连很好做,无非就是把整个场景和人物全部重新生成一遍,各种数值根据服务端提供加到人物身上而已。帧同步的断线重连就比较麻烦了,例如客户端在战场开始的第10秒短线了,第15秒连回来了,就需要服务端把第10秒到第15秒之间5秒内的所有消息一次性发给客户端,然后客户端加速整个游戏的核心逻辑运行速度(例如加速成10倍),直到追上现有进度。

十、注意点

需要保证每次随机的数字都相同,所以需要自己实现一套随机数,不能用unity自带的那个随机数接口,而且需要服务端发送相同的随机种子;因为非常微小的误差就有可能产生蝴蝶效应,所以所有float型的参数必须变成int型,保证计算结果一致。

原文地址:https://www.cnblogs.com/Likeyous/p/11602491.html

时间: 2024-08-25 17:52:56

状态同步和帧同步个人理解的相关文章

两种同步模式:状态同步和帧同步

https://zhuanlan.zhihu.com/p/36884005?utm_medium=social&utm_source=qq 一.同步 所谓同步,就是要多个客户端表现效果是一致的,例如我们玩王者荣耀的时候,需要十个玩家的屏幕显示的英雄位置完全相同.技能释放角度.释放时间完全相同,这个就是同步.就好像很多个人一起跳街舞齐舞,每个人的动作都要保持一致.而对于大多数游戏,不仅客户端的表现要一致,而且需要客户端和服务端的数据是一致的.所以,同步是一个网络游戏概念,只有网络游戏才需要同步,而

帧同步和状态同步

帧同步 说白了就是在客服端跑一个服务器,每个服务器基于相同的帧率,同步在相同帧的输入,达到一致性. 状态同步 服务器运算,把状态的改变发给客服端 首先要说 帧同步不是说不能加入状态同步的东西,状态服务就不能有帧同步类似的东西,所以他们的优点只基于 帧同步 服务器和客服端在一块,只发输入 状态同步 服务运算,发状态 网络: 帧同步 的网络负担肯定更小 但是延迟的问题大家都有,解决办法点也不一样.帧同步解决同步问题就是好了,状态解决的办法和思路比较多,比如客服端预判,部分运行客服也做一次等.总的来说

帧同步(LockStep)该如何反外挂

在中国的游戏环境下,反挂已经成为了游戏开发的重中之重,甚至能决定一款游戏的生死,吃鸡就是一个典型的案例. 目前参与了了一款动作射击的MOBA类游戏的开发,同步方案上选择了帧同步技术(LockStep而非snapshots以下同).那么就有很多人担心起来,客户端会跑全部逻辑帧同步该如何反外挂,和状态同步有什么区别呢? 首先我们来分析一下手游的风险和外挂的分类,这里推荐腾讯游戏安全中心的文章,有着非常详细深入的介绍.手游的风险:? 静态修改文件:将游戏解包修改资源 ,配置,代码等之后再重新打包○ 修

帧同步与状态同步

从事棋牌游戏三年,一直不知道原来我们游戏使用的服务端编程的专业术语叫状态同步. 状态同步: 服务端:保存的是整个场景实时的状态.对各个对象实体用一些变量描述它当前的状态. 优点:网络流量消耗较小 缺点:当场景里实体对象很多时,需要保存的内存数据就会大大增加.并且不一定可控. 帧同步: 服务端:保存一个时间片(逻辑帧)里各个玩家的操作的指令集 优点:无需保存对象的实体状态 缺点:难以调试,断线重连回来必须执行一遍指令集,会很慢.

帧同步优化难点及解决方案

帧同步这部分比较复杂,细枝末节有很多优化点,也有一些不同的优化方向,根据不同项目类型.对操作手感的要求.联机玩家的个数等,会有不同的难点和痛点.不同的优化方向,优化手法的差异,可能导致一些争论.并且,帧同步,本身也有很多变种,以应对不同的需求.所以,本文一切都是基于作者的项目类型(ACT)来做的方案和优化,并不一定适合其它也需要帧同步的游戏,故在此提前说一下,以免引起一些不必要的误解. 帧同步的几个难点 帧同步的基础原理,以及和状态同步的区别,已经有很多文章介绍,我就不再赘述,大家可以自行goo

手游帧同步的研究

网络游戏的同步可以做的很简单,也可以做的很复杂.简单来说就是通过Http或者Socket来跟服务器同步数据.而如果往复杂了说,可以有p2p.帧同步.航位预测等等高级课题可以研究. 因为我们的项目需求----几百个独立单位的实时同步(带pvp的rts),所以研究了下帧同步.不过后来发现它其实有很多问题,所以具体如何还要看其他同事的研究成果.以我个人来说,修改游戏方案反而是最合理的解决方案. 首先从需求上来说,几百个独立单位的作战,本身结果和士兵强弱从策划的角度来看就是不可控制的.玩家更加不可控制.

帧同步在竞技类网络游戏中的应用

帧同步在竞技类网络游戏中的应用 帧同步在网上可以搜的资料比较少,关于游戏的更是没有,不过,实现的原理也比较简单,最近几天就写了份关于帧同步的文档,当作给同事扫扫盲,顺便也在这里发发,可以给其他人参考参考     --竞技类网络游戏设计方案   一.        前言 帧同步,根据wiki百科的定义是,一种对同步源进行像素级同步显示的处理技术,对于网络上的多个接入者,一个信号将会通过主机同步发送给其他人,并同步显示在各个终端上.同步信号可以是每帧的像素数据,也可以是影响数据变化的关键事件信息.

Unity 3D实现帧同步技术

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 现在竞技类网络游戏比较火,市面上也出现了很多这种类型的游戏竞赛,提到网络游戏就回避不了一个问题:同步技术,多个人在一个游戏场景围攻一个怪物或者说多人组队战斗等等.现在在移动端的游戏由

什么是游戏中的帧同步

游戏中的帧同步是一种客户端与服务器的同步方式,是为了实现高实时性的需求而设计的.在实时pvp游戏中,要求每个客户端高度同步,怎么做到精确的同步呢,那就是向同步的所有客户端广播同步消息.由于网络存在延迟,因此一个客户端发送消息给服务器的过程存在延迟,服务器广播同步消息给其他客户端也存在延迟,为了降低这个延迟,服务器应该尽量减少逻辑,快速地转发消息让客户端能够同步,因此在帧同步中,游戏的逻辑计算应该放到客户端来实现,服务器在收到消息后应该迅速地进行广播,而不应该做过多的逻辑计算.既然是客户端进行计算