资料都来自于网络。

  • 前言
  • 网络同步模式的演化史
    • 概念
    • P2P模型
    • Packet Server(包的简单中继)
  • 参考

前言

在制作网络游戏的时候,经常会讨论同步方式。同步这个话题就是让不同客户端的游戏表现同步。

王者荣耀是使用的帧同步(Lockstep),有成功案例,后续才会有很多人想着跟进。

帧同步:服务器按照帧转换客户端的操作,其他客户端依赖这些信息在本地模拟表现。

状态同步:客户端操作的时候,只能将状态数据提交给服务器,服务器得到了通过运算将最终结果广播给全部客户端。

成功案例清单:

帧同步 状态同步
FPS doom CSGO、守望先锋、逆战、绝地求生
MOBA 王者荣耀、DOTA、英雄战境 全民超神、LOL、DOTA2
SPT NBAOline、街头篮球、FIFA
FGT,ACT 街霸 怪物猎人
RTS 星际争霸、魔兽争霸
MMO 全民斗战神 魔兽世界、轩辕传奇、天涯明月刀
RAC QQ飞车
其他 街机、主机模拟器、刀塔传奇、剑与家园 各种类型都有

大量玩家参与的游戏只能使用状态同步。要求及时性高,

本文就记录一下同步的差异,各项资料都来自于baidu搜索的。其实在google上搜索,也没有看老外大量使用 state sync,frame sync,frame lock sync之类的文章。可能是我使用的词汇有问题。

网络同步模式的演化史

参考文档有:《The-DOOM-III-Network-Architecture》

  • J.M.P. van Waveren

  • March 6th 2006

概念

游戏需要再四个要素上做平衡:

一致性,响应性,带宽,延迟

FPS实体列表:

玩家,怪物,导弹,门。

参与者去管理和维护自由的那份拷贝,一种实现是通过施加一致性的逻辑推动所有的状态去同步地更新,另一种实现是随着时间的流逝不断地比较和发送最小的状态变化和差异。

P2P模型

Doom(1994)的网络模型是完全同步的P2P系统。每秒对玩家动作(move/turn/use/fire, etc.) 采样 35 次 (得到一个 tick command) 并发送给其他所有玩家,每个玩家都接受来自所有玩家的 tick command,当某个玩家收到所有其他玩家的下一帧 tick command 后,该玩家的本地游戏状态推进到下一帧。这样的后果是全局性的延迟 (每个玩家从做出动作到收到反馈的响应时间) 由最慢网络连接的玩家决定。

存在问题清单:

  1. 所有玩家都需要主动维护完美的状态同步,由于硬件不同(有时甚至是未初始化的变量)等引入的不一致,会让每个参与者细微的不同被累积下来,导致参与者之间显著的视觉和逻辑的差异。这种不一致的引入很难查,因为只有当它们累积起来才会有明显的效果,而等感觉到差异时,真正的问题已经发生很久了。
  2. 完全同步的网络无法跨平台。不同的硬件上,由不同编译器生成的汇编指令有时会产生轻微不同的行为 (浮点指令尤甚)。
  3. 随着玩家数量增长,延迟会迅速变得难以接受。而且只要有一个玩家的网络有波动,会影响到所有人的体验。
    随着玩家数量增长,带宽需求会指数性地同步增长。
  4. 同步网络由于只发送 tick command,所有玩家必须同时启动游戏 (来保证游戏状态的一致性) 无法做到随时的加入和退出。
  5. 由于玩家本地维护了所有的状态,方便了作弊的实现。

Packet Server(包的简单中继)

P2P模型上增加Packet Server,将接受到的tick command转发,这样减少了客户端直接的链接。能解决某个玩家慢的问题。

参考

  • [1] 帧同步和状态同步该怎么选(上)
  • [2] 帧同步和状态同步该怎么选(下)
  • [3] 帧锁定同步.按帧同步.状态同步
  • [4] 帧同步联机战斗(预测,快照,回滚)
  • [5] Doom/Quake I/II/III网络模型演化
  • [6] Doom源码
  • [7] The-DOOM-III-Network-Architecture

帧同步和状态同步笔记相关推荐

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

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

  2. 帧同步_帧同步和状态同步该怎么选(上)

    这是一篇拖延了2年多的文章-2017年10月份开始写的,直到这次过年才写完... 前言 随着王者荣耀的崛起,使用帧同步(Lockstep)的游戏也越来越多,关于帧同步和状态同步的讨论争论也有不少,那么 ...

  3. mtk 帧同步_【小松教你手游开发】【面试必读(编程基础)】网络游戏同步方式(帧同步和状态同步)...

    在做网络游戏的时候首先要做的是选择一种同步方式来使用,网上的文章都是说帧同步与状态同步的选择,但是又经常讲的模糊不清,我大概整理了一下,并且有一种我们现在项目用的网络同步方式 状态同步 状态同步就有好 ...

  4. 【网络同步】浅析帧同步和状态同步

    前言 谈到网络游戏,不可避免要谈到现有两种比较常见的网游同步技术:帧同步和状态同步 说到这两个名词,大家夸夸奇谈,都能讲上些许自己的见解,我反正啥也不懂 这篇文章就打算着重学习一下这两种技术的基础和原 ...

  5. Unity帧同步和状态同步

    帧同步 适用游戏类型 对于延迟要求较高的游戏,例如:FPS游戏, RTS游戏(即时战略游戏)等. 原理 帧同步不同步状态,只同步玩家的操作指令,操作指令包含当前的帧索引.这里最重要的概念就是 相同的输 ...

  6. 游戏帧同步和状态同步

    在网络游戏中,服务器和客户端的同步技术是一个绕不开的话题,也是在技术选型时,首先需要确定的方案.网游中的同步技术主要有两个技术方向,帧同步和状态同步.本文简单讨论了帧同步和状态同步,整理并对比了他们的 ...

  7. 帧同步与状态同步:方案比较

    状态同步:大型的MMOARPG ,比如魔兽世界 帧同步:网络条件好的局域网,比如魔兽争霸,优化过的MMRPG, 比如王者荣耀 相比之下状态同步适用型更广,特别适合复杂度高,延迟要求高,玩家多的游戏,例 ...

  8. 网络游戏中的帧同步与状态同步

    帧同步的基础概念 相同的输入 + 相同的时机 = 相同的输出. 客户端发送操作信息到服务器,服务器收到后转播给所有的客户端,客户端接收服务器的操作信息后计算游戏行为的结果, 然后通过广播下发游戏中各种 ...

  9. 帧同步与状态同步入门

    帧同步和状态同步是游戏客户端和服务器通信的两种方式: 适合帧同步的情况: 1,网络波动较大,比如移动端网络. 2,追求即是反馈,例如FPS.MOBA,SPT(这是啥游戏?) 3,控制大量单位,RTS( ...

最新文章

  1. JSON Web Tokens测试工具
  2. Qt学习笔记之QChar
  3. linux 目录大小是12288,为什么有些目录数的引用超过3,为什么很多目录的大小都是4096...
  4. Ethercat解析(六)之功能概述
  5. 黑马程序员--里氏转换
  6. 【NER】中文细粒度命名实体识别数据集来了
  7. 智能优化算法应用:基于GWO优化的Renyi熵图像多阈值分割 - 附代码
  8. 紫猫插件-网络共享数据(7-15)
  9. 我去面试没带简历,你让我走人?
  10. 发射功率 接收灵敏度 RF射频传输 原理 介绍 三分钟看懂 详解!
  11. 数据库实体关系图(ERD)
  12. 全网顶尖,毫不夸张的说这份斯坦福大学机器学习教程中文笔记,能让你机器学习从入门到精通
  13. ClassOne 向 MicroLED 初创公司 Raxium 提供 Solstice 工具
  14. 托业考试 与 托福考试
  15. Gym 101431B Vera and Banquet (后缀数组)
  16. pandas,numpy的学习
  17. 545C - Woodcutters
  18. 安全架构--4--企业基础安全运营平台建设实践
  19. 框架相关核心要点详解
  20. Python3基础教程2——Python的标准数据类型

热门文章

  1. 接口自动化实战之注册接口
  2. 1.Mysql 的正则表达式
  3. C语言_3名学生4科成绩
  4. 计算机公共课2-Windows 7操作系统
  5. Java位运算之移位运算
  6. Three Religions CodeForces - 1149B (字符串,dp)
  7. OpenPAI调研手册
  8. RTSP URL正则表达式校验
  9. linux 查看环境变量
  10. Python中列表list一些基础知识运用,十分基础