最近毕设准备做一个关注游戏同步方案的 demo,准备选用帧同步。正巧所在组火影手游绝大部分的玩法都是使用帧锁定同步来做的,所以在这记录一下。

概述

帧同步,或者更详细的说是帧锁定同步,是将前端的表现划分为每秒n次的逻辑关键帧,客户端的表现根据关键帧完成展示。客户端将指令经由或者不经由服务器广播到所有相关的客户端上,相邻的指令将会被封装为帧并被客户端理解执行。所有元素在某一时刻的状态,都是由各个客户端独立计算出来的。

帧同步方案

这里我们讨论cs架构下的帧同步方案。

下图反应了火影手游pvp玩法中的同步逻辑。

可以看到,服务器端每 66ms 会将接收到的所有客户端指令封装成帧并下发到各客户端中。如果某个帧在传输中丢失了,将会随下一帧重传。同时,使用 seq 和 ack 对每个帧进行确认。如果 99ms 内客户端还没有收到包含自己已发出指令的帧,就要将丢失的指令重传。

无论是客户端发送的 action,还是服务器端的 frame,都要有确认重传机制。frame 的确认就是通过客户端附带的 ack 字段来确认。

乐观锁

标准的帧同步,是要求客户端定时发送指令,服务器必须等待收集到所有客户端的包之后再下发,这个等待帧信息的过程称为帧锁定。如果一个客户端网络卡顿,那么所有客户端都要等待这个客户端的帧同步信息。

乐观锁就是无论是否收集到客户端的信息,都将目前为止收集到的指令封装为帧并下发,客户端发现自己的指令丢失之后应该将指令重传。这样所有客户端不会因为某个客户端的卡顿而卡顿。

不同步,反作弊以及Gamecore

每个客户端都要保证有相同的初始状态,一旦存在不同步,就要快速定位不同步和恢复。

当玩家数多于2个的时候,可以取大多数作为正确的状态,在检测到不同步后恢复。如果是只有两人参与的游戏,如果出现不同步,比较好的解决方法是设计合理的 gamecore。

gamecore 是同时运行在客户端和服务器端的游戏核心逻辑,所有状态结算都由 gamecore 完成,我们可以更倾向于相信 gamecore 的计算结果。一旦出现不同步,只要 gamecore 和其中部分客户端的计算结果一致,就可以将 gamecore 的状态下发到客户端中。如果 gamecore 与所有玩家的状态都不一致,那么就要考虑 gamecore 的健壮性和正确性了,应该通过 log 及时发现并排除这样的状况。

如上的 gamecore 设计,也是一个反作弊的好解决方案。

gamecore 和状态同步?

帧同步主要是为了解决大量单位都需要同步的情况,比较少量的网络传输能够保证高度同步。gamecore 只是为了辅助客户端的状态计算,这样保证了同步的高效性。

finally

以上说的都是一些浅薄的个人之见,有什么不对的希望业界前辈不吝赐教!

帧同步 java_游戏同步方案——帧锁定同步相关推荐

  1. 内部同步 外部同步 java_如何用匿名内部类实现 Java 同步回调

    在一个应用系统中,不论使用何种编程语言,模块之间要进行调用,仅存在三种方式:同步调用.异步调用.回调.本文就其中回调方式进行详细解读,并通过匿名内部类的手段,在最后实现一个同步回调的过程. 一.回调的 ...

  2. 外网数据同步到内网方案_数据同步之解决方案

    关于数据同步的需求,想必是开发人员都可能遇到!下面就聊聊关于数据同步的解决方案: 一.使用中间表:数据生产者将数据放在一个中间库,数据消费方定时的去这个中间库取数据,用来消费这些数据, 但是这中方案并 ...

  3. 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步

    今天继续开新坑,尽管过了很多 Unix 套接字编程的坑,但是实际还是有很多不同场景和性能的需求,以及最服务器架构的内容也就接触过 preforking 和 master 带 worker 而已. 所以 ...

  4. 游戏同步方案——帧同步

    游戏同步方案--帧同步 帧同步(Lockstep)和状态同步(State Synchronization) 状态同步 帧同步 适用的游戏类型和代表作 帧同步的关键 运行环境一致 显示与逻辑分离 举个简 ...

  5. 网络同步在游戏历史中的发展变化(二)—— Lockstep与帧同步

    前言: 网络同步属于游戏开发中比较重要且复杂的一部分,但是由于网上的资料内容参差不齐,很多人直接拿别人的结论写文章,导致很多人对这一块的很多概念和理解都是错误的.本文参考了大量的相关论文和资料(三十篇 ...

  6. 基于帧同步的游戏框架说明

    基于帧同步的游戏框架说明 一,关于帧同步和状态同步的比较 帧同步 状态同步 安全性 比较差,计算都在客户端,服务器只做转发:有服务器校验的方案,比较繁琐 计算都在服务器 可以将重要的判定都由服务器决定 ...

  7. 帧同步与状态同步:王者荣耀的帧同步方案

    以下为<王者荣耀>技术总监复盘回炉历程演讲全文 如今已经大获市场成功的<王者荣耀>一直是业内各方关注的对象,而我们也知道这款产品在成为国民级游戏之前,也遇到过一段鲜有人知的调优 ...

  8. 游戏中的网络同步机制(一)帧同步Lockstep

    转载自:https://www.jianshu.com/p/64b3f162dcf4 参考游戏中的网络同步机制--Lockstep 一.前言 每个人或多或少都接触过网游,那个虚拟的世界给予了我们无穷的 ...

  9. 小球大作战 java_小球大作战-帧同步

    帧数设定为40,每帧25MS 服务端 :基于Windows socket 的TCP,客户端:unity 基本原理,服务端轮询接受服务端发来的消息,在一帧时间内还没收到来自客户端的消息,那么就会默认收到 ...

最新文章

  1. Android开发系列之ListView
  2. python 去除所有的中文 英文标点符号
  3. Win7下使用U盘安装linux Ubuntu16.04双系统图文教程
  4. python selenium 下拉框 页面变化_python-selenium之select下拉框
  5. Vue+SpringBoot的微信登录
  6. Julia: 关于下载库时WinRPM的Bug
  7. 公众号内打开提示404_微信公众号文章“号内搜”新功能玩法
  8. 机器学习实战之路—— 1 线性回归 (二)
  9. Linux下安装vim命令
  10. oracle 查询数据的结果集导出
  11. 分区助手4.0绿色中文版
  12. 国标GB28181协议视频智能分析平台EasyCVR,构建智慧企业AR云景解决方案
  13. [翻译] 使用 TensorFlow 进行分布式训练
  14. python变量保存为.mat文件
  15. uni-app 不用onShow返回上一页刷新数据
  16. 黑苹果EFI文件,戴尔DELL-OptiPlex-7060and7070-Catalina
  17. 求100以内的素数(质数)用python
  18. 贪心算法之prim算法
  19. VS error C1083: 无法打开编译器生成的文件: Permission denied,link无法打开.ilk
  20. MT7621方案 LED 灯控制 (基于OpenWrt平台)

热门文章

  1. win10无法识别蓝牙麦克风
  2. Infraworks 使用问题总结
  3. Mac OS使用ikev2无法ping通宿主机
  4. 文章复制到word上很多换行怎么办?word怎么一键删掉换行?
  5. 搭建企业知识管理平台,走出“数据孤岛”困境
  6. html 绑定事件的方式
  7. WORD操作之“对象位置”
  8. 万字超详细介绍认知诊断计算机自适应测验(CD-CAT),入内不亏!
  9. HTML5 Canvas发光大树动画
  10. wps冻结窗口:使某行固定不动,可以上下拖动其他行