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

概述

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

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

帧同步概念

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

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

状态同步概念

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

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

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

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

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

对比

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

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

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

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

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

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

相关文章

算法-3-基本的数据结构

单双链表 1.单链表双链表如何反转 import java.util.ArrayList; import java.util.List;public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {public int…

掘根宝典之C++深复制与浅复制(复制构造函数,默认复制构造函数)

到目前为止我们已经学了构造函数,默认构造函数,析构函数:http://t.csdnimg.cn/EOQxx 转换函数,转换构造函数:http://t.csdnimg.cn/kiHo6 友元函数:http://t.csdnimg.cn/To8Tj 接下来我们来学习一个新函数…

python毕设选题 - 大数据全国疫情数据分析与3D可视化 - python 大数据

文章目录 0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的…

关于Http和Https

HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)是用于在计算机之间传输数据的协议。它们是互联网上常见的两种通信协议,用于浏览器和服务器之间的数据传输。 HTTP(超文本传输协议)&#xff1…

2024阿里云云服务器ECS价格表出炉

2024年最新阿里云服务器租用费用优惠价格表,轻量2核2G3M带宽轻量服务器一年61元,折合5元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年,2核4G4M轻量服务器165元一年,2核4G服务器30元3…

【Funny Game】 人生重开模拟器

目录 【Funny Game】 人生重开模拟器! 人生重开模拟器! 文章所属专区 Funny Game 人生重开模拟器! 人生重开模拟器,让你体验从零开始的奇妙人生。在这个充满惊喜和挑战的游戏中,你可以自由选择性别、出生地、家庭背景…

String.format()详细用法

String 类有一个强大的字符串格式化方法 format()。下面是常用的方法总结。 一、占位符类型 String formatted String.format("%s今年%d岁。", "小李", 25); // "小李今年25岁。" 二、字符串和整数格式化 // 将第二个入参拼接到模板中,入参长…

职业性格在求职应聘和跳槽中的作用

性格测试对跳槽者的影响大不大?首先我们要弄清楚两个问题,性格对我们的职业生涯又没有影响,性格测试是什么,职场中有哪些应用?性格可以说从生下来就有了,随着我们的成长,我们的性格也越来越根深…

大模型训练流程(一)预训练

预训练GPU内存分析: GPU占用内存 模型权重 梯度 优化器内存(动量估计和梯度方差) 中间激活值*batchsize GPU初始化内存 训练流程 (选基座 —> 扩词表 —> 采样&切分数据 —> 设置学习参数 —> 训练 —>…

什么是美颜SDK?美颜SDK在短视频平台中的作用探究

在这个以视频为主导的平台上,美颜技术在其中扮演了不可或缺的角色。本文将探讨美颜SDK的本质,以及它在短视频平台中所发挥的作用。 一、什么是美颜SDK? 美颜SDK是一种软件开发工具包,其主要功能是通过算法对图像进行美化处理。…

【教3妹学编程-算法题】人员站位的方案数 II

2哥 : 3妹,今天第一天上班啊,开工大吉~ 3妹:2哥,开工大吉鸭,有没有开工红包? 2哥 : 我们公司比较扣,估计不会发的。 3妹:我们公司估计也一样,不过依然挡不住我打工人的热…

Oracle触发器

触发器 满足特定事件时系统自动执行的命名块。主要用于实现一些比较复杂的完整性需求。 分类 DML触发器,DDL触发器,替代触发器,从数据库事件触发器。 DML触发器:在表上执行DML操作时自动触发。 创建DML触发器。 考虑四个方面&a…

【工具类】vscode ssh 远程免密登录开发

存放代码的机器运行 sshd,使用 vscode 的机器保证可以通过 ssh 登录服务器vscode 机器通过 ssh-keygen 生成 ssh 公私钥对将客户端的 id_rsa.pub 加入到服务器的鉴权队列 cat id_rsa.pub >> authorized_keysvscode 配置即可.ctrlp, remote-ssh: open ssh configuration f…

HarmonyOS router页面跳转

默认启动页面index.ets import router from ohos.router import {BusinessError} from ohos.baseEntry Component struct Index {State message: string Hello World;build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//添加按钮&am…

【 JS 进阶 】原型对象、面向对象

目标 了解构造函数原型对象的语法特征,掌握 JavaScript 中面向对象编程的实现方式,基于面向对象编程思想实现 DOM 操作的封装。 了解面向对象编程的一般特征掌握基于构造函数原型对象的逻辑封装掌握基于原型对象实现的继承理解何为原型链及其作用能够处理…

Hive使用双重GroupBy解决数据倾斜问题

文章目录 1.数据准备2.双重group by实现 解决数据倾斜2.1 第一层加盐group by2.2 第二层去盐group by 1.数据准备 create table wordcount(a string) row format delimited fields terminated by ‘,’; load data local inpath ‘opt/2.txt’ into table wordcount; hive (…

spring boot rabbitmq常用配置

直接上代码 package com.example.demo;import org.aopalliance.aop.Advice; import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframewo…

TP-LINK路由器的IPTV功能测试验证

路由器设置 路由器设置页面的说明: 此功能需配合TP-LINK面板式AP使用,可在路由器与AP之间建立IPTV数据透传通道,改善IPTV机顶盒与光猫距离较远不易连接的问题。 注意:开启IPTV功能会导致LLDP功能无法正常使用。 直接按设置向导…

C++Qt:noteBookPro_01

一、创建项目 选择Qt Widgets 常用的是QWidgets和MainWindow。两者的区别: QWidgets用于简单的窗口,没有内置的菜单栏、工具栏和状态栏。适用于简单专用的应用程序,不需要复杂的界面组件。 MainWindow是包含完整的菜单栏、工具栏和状态栏的主…

Linux 主机数据拷贝与 Linux 服务器之间拷贝文件的方法

Linux 主机数据拷贝与 Linux 服务器之间拷贝文件的方法 1. 使用 scp 命令2. 使用 rsync 命令3. 使用 scp 和 rsync 的图形界面工具4. 使用 FTP/SFTP 协议总结与比较 在 Linux 系统中,数据拷贝是日常操作中的常见需求,尤其是在不同主机或服务器之间进行文…