网络同步—帧同步和状态同步解析

news2024/10/6 14:26:58

概述

同步就是要多个客户端表现效果是一致的,而且对于大多数的游戏,不仅仅要表现一致,还要客户端和服务器的数据也是一致的。所以同步是个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。

帧同步和状态同步是在网络游戏和多人在线应用中常见的两种同步方法,它们用于确保所有参与者看到的游戏状态一致。

帧同步概念

帧同步是一种同步方式,其中每个客户端都在相同的逻辑帧上执行相同的操作。在这种方式下,游戏状态的更新在固定时间间隔(例如,每秒30帧)内进行。客户端只需发送用户输入,而无需发送整个游戏状态。服务器会将所有客户端的输入收集在一起,并在每个逻辑帧上广播给所有客户端。客户端在收到其他客户端的输入后,根据这些输入更新游戏状态。
在这里插入图片描述

适用场景:帧同步适合对实时性要求较高、用户交互较为频繁的游戏,如实时策略游戏、格斗游戏等。

状态同步概念

同步的是游戏中的各种状态,是指的将其他玩家的状态行为同步的方式,一般情况下AI逻辑,技能逻辑,战斗计算都由服务器运算,只是将运算的结果同步给客户端,客户端只需要接受服务器传过来的状态变化,然后更新自己本地的动作状态、Buff状态,位置等就可以了
在这里插入图片描述

(但是为了给玩家好的体验,减少同步的数据量,客户端也会做很多的本地运算,减少服务器同步的频率以及数据量。)

这里客户端相当于服务器的播放器一样,因为核心的判断都是在服务器的,一切的表现和属性都以服务器为准,就算客户端的血条是满的,服务器的血条是0,那依旧要死。

适用场景:状态同步适合对实时性要求较低、状态变化较少的游戏,如回合制策略游戏、棋类游戏等。

实例:一个角色要释放一个技能(非指向技能),
客户端告诉服务器我要释放一个技能
服务器通知所有客户端在某个地方以什么方向释放技能
客户端根据收到的信息创建一个特效放在这个地方,然后以某个方向飞行
服务器根据碰撞检测判断到某个时刻碰到了地方英雄,通知客户端
客户端根据服务器发来的信息删除特效,被打到的人减少血量播放收击特效

对比

选择帧同步还是状态同步取决于以下因素:

  • 实时性要求:帧同步更适合实时性要求高的游戏,状态同步适用于实时性要求较低的游戏。
  • 网络带宽和延迟:帧同步对延迟和网络的带宽要求较高,而状态同步对延迟和网络的带宽要求相对较低。
  • 游戏类型和交互复杂性:帧同步更适合用户交互频繁的游戏,状态同步适用于状态变化较少的游戏。
  • 容错性:帧同步对客户端和服务器之间的同步精度要求较高,容错性较低。状态同步在一定程度上可以容忍不同客户端之间的状态差异。

帧同步只需要接受输入和输出,在客户端上进行逻辑运算,因此传播流量小,速度快,实时性高。状态同步则需要将玩家的状态各种信息也要传输,因而流量大,速度慢。

状态同步帧同步
流量相对高相对低
回放记录文件大记录文件小
安全性服务器实现逻辑,安全性高逻辑再客户端计算,反外挂压力大,无法避免开图挂
服务器压力
战斗校验协议加密,内存混淆,误差校验,无法彻底解决服务器可以重启跑一遍战斗
网络卡顿的表现瞬移,回位,莫名掉血战斗卡顿
实现调优状态同步方式,客户端需要做插值处理客户端按照单机方式开发,保证逻辑层和表现层分离。逻辑层不要用到浮点数,不要用不确定顺序的逻辑结构
开发效率同一个功能至少需要一个客户端和服务器共同完成,开发困难,但仍然占据主流服务器开发难度低,只负责转发,开发效率高
断线重连状态同步很简单,重新把整个场景中的任务全部重新生成一边,各种数值根据服务端提供的信息加到任务身上即可。帧同步的断线重连时比较麻烦的,当你在10分钟的时候断线了,在15分钟回来,就需要把服务器这15分钟的消息一次性的发送给客户端,然后客户端加速整个游戏的核心逻辑运算,直到追上现有进度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1456594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

普中51单片机学习(九)

蜂鸣器 蜂鸣器简介 在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产…

版本控制(Git)

Fork 本课程网站的仓库 将版本历史可视化并进行探索是谁最后修改了 README.md文件?(提示:使用 git log 命令并添加合适的参数)最后一次修改_config.yml 文件中 collections: 行时的提交信息是什么?(提示&am…

互联网使用代理IP的作用

互联网使用代理IP主要有以下作用: 1. 隐私保护: - 使用代理IP,用户的原始IP地址会被代理服务器的IP地址所替代,从而隐藏用户的真实身份和地理位置信息,增加网络匿名性。 2. 安全防护: - 代理服务器可以作为…

vue-productionSourceMap作用

当其设置为false时(productionSourceMap: false) 当其设置为true时(productionSourceMap: true) 注:1.当设置为true时,打包后每个文件都有一个.map文件,其目的是为了精确定位代码错误 2.当设置为false时,可减少项目打包大小 3.正式环境禁止使用true,因为其可通过反编译.map文件…

深度学习之pytorch实现线性回归

度学习之pytorch实现线性回归 pytorch用到的函数torch.nn.Linearn()函数torch.nn.MSELoss()函数torch.optim.SGD() 代码实现结果分析 pytorch用到的函数 torch.nn.Linearn()函数 torch.nn.Linear(in_features, # 输入的神经元个数out_features, # 输出神经元个数biasTrue # 是…

Linux防火墙:SNAT和DNAT地址转换操作

目录 一、NAT 1、NAT概念 2、NAT分类 二、SNAT 1、SNAT概念 2、SNAT源地址转换过程 3、已知外网地址的SNAT操作 3.1 配置网关服务器 3.1.1 添加网卡 3.1.2 配置ens33网卡 3.1.3 配置ens36网卡 3.1.4 重启网卡并查看网卡是否生效 3.1.5 开启路由转发功能 3.1.6 配…

Springboot医院信息管理系统源码 带电子病历和LIS Saas应用+前后端分离+B/S架构

目录 系统特点 技术架构 系统功能 1、 标准数据维护 2、 收费(门诊/住院)系统 3、 药剂管理系统 4、 医生工作站系统 5、 护士工作站系统 6、电子病历系统 系统优点 云HIS系统简介 云HIS系统功能模块 门急诊挂号管理 门诊收费管理 门诊医…

嵌入式面试:瑞芯微

文章目录 一、2024 秋招1.1 IIC的速率范围 :1.2 linux驱动子系统汇总 :1.3 linux关抢占情况汇总 :1.4 操作或者读写一个文件时,从用户态到内核态再到物理介质的流程(考点:虚拟文件系统) : 一、2024 秋招 1…

Model / View结构

红色部分是可以直接使用的。 QFileSystemModel; QFileSystemModel的使用: 头文件: QFileSystemModel* model nullptr; cpp文件: model new QFileSystemModel; model->setRootPath(QDir::currentPath()); ui->listView->setModel…

LDR6020打造最具有性价比的TYPE-C台式显示器方案

对于手里有TYPE-C接口电脑设备,又觉得自带屏幕太小,需要换用外接屏幕,或者需要多屏办公的用户。肯定要首选支持Type-c连接的显示器了。为什么呢?因为Type-c连接可以战未来,而不是仅仅能满足现在的需求。 首先介绍一下…

【vue+leaflet】vue项目中使用leaflet绘制室内平面图、leaflet.pm在平面图中绘制点、线、面图层(一)

效果图: 一,插件安装 npm i leaflet --save // 我的版本^1.9.4 npm i leaflet.pm --save // 我的版本^2.2.0附官网链接: leaflet官网: https://leafletjs.com/index.html leaflet.pm官网: https://www.npmjs.com/package/leaflet.pm?activeTabreadme 二,模块引入 因为我…

语义相关性评估指标:召回率、准确率、Roc曲线、AUC;Spearman相关系数、NDCG、mAP。代码及计算示例。

常规的语义相关性评价可以从检索、排序两个方面进行。这里只贴代码。详细可见知乎https://zhuanlan.zhihu.com/p/682853171 检索 精确率 def pre(true_labels[],pre_labels[]):""":param true_labels: 正样本索引:param pre_labels: 召回样本索引:return: 精…

nacos 2.3.1-SNAPSHOT 源码springboot方式启动(详细)附改造工程地址

文章时间是2024-2-18日,nacos默认develop分支,最新版是2.3.1-SNAPSHOT版本。 我们这里就以nacos最新版进行改造成springboot启动方式。 1. Clone 代码 nacos github地址:https://github.com/alibaba/nacos.git 根据上面git地址把源码克隆到…

wps快速生成目录及页码设置(自备)

目录 第一步目录整理 标题格式设置 插入页码(罗马和数字) 目录生成(从罗马尾页开始) ​编辑目录格式修改 第一步目录整理 1罗马标题 2罗马标题1一级标题 1.1 二级标题 1.2二级标题2一级标题 2.1 二级标题 2.2二级标题3一级标…

开源模型应用落地-工具使用篇-SLB(二)

一、前言 通过学习"开源模型应用落地"系列文章,我们成功地建立了一个完整可实施的AI交付流程。现在,我们要引入负载均衡,以提高我们的AI服务的性能和故障转移能力。本文将详细介绍如何使用腾讯云的负载均衡技术来将我们的AI服务部署…

网页脚本 bilibili004:字幕展示添加下载功能实现

效果 按钮显示 按钮hover 按钮点击 代码实现 在main函数中添加下载逻辑 getVideoName().then((resultObject) > {// 处理异步的Promise对象,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/thenaddDownloadButt…

Fiddler与wireshark使用

Fiddler解决三个问题 1、SSL证书打勾,解析https请求 2、响应回来乱码,不是中文 3、想及时中止一下,查看实时的日志 4、搜索对应的关键字 问题1解决方案: 标签栏Tools下 找到https,全部打勾 Actions里面 第一个 t…

沁恒CH32V30X学习笔记00--芯片概述

芯片概述 资源 系统框图 V303时钟树 V305/V307时钟 RISC-V4F 处理器 单精度浮点运算 处理器内部以模块化管理, 包含快速可编程中断控制器(PFIC) 内存保护 分支预测模式 扩展指令支持等单元 小端数据模式 多级硬件中断堆栈&#

ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整

文章目录 ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整获取音频长度pydub获取音频长度获取时长精确到秒格式设定 mutagen获取音频长度 调整音量视频音量调整注意事项 ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整 老王媳妇说上次那个pip挺好…

『运维备忘录』之 SSH 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等知识,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…