网络游戏开发之同步模式

网络游戏如何实现所有客户端玩家信息同步?(如吃鸡中所有玩家的位置同步)

同步模式一般分两种:状态同步和帧同步。

状态同步:状态发生变化后,客户端上传操作到服务器,服务器收到后处理行为的结果,然后以广播的方式把状态发送给客户端,客户端收到状态后再根据状态显示内容。
如:吃鸡等大地图游戏、MMO游戏、因为MMO游戏的客户端承载有限,并不能把整张地图的实体全部展现出来。

帧同步:每一帧都要同步,每个客户端通过拿到相同的状态和指令,按帧顺序执行,达到同步效果。
如:LOL、王者荣耀等

二者区别:
1、状态同步的战斗逻辑在服务端,而帧同步的战斗逻辑在客户端,服务端只转发操作,不做任何逻辑处理。
2、状态同步比帧同步流量消耗大,服务器压力比较大,因为要做更多运算。
3、状态同步的安全性比帧同步高很多,因为状态同步的所有逻辑和数值都是在服务端的,而帧同步因为所有数据全部在客户端,所以解析客户端的数据之后就很容易作弊。
4、状态同步开发起来比较难,一个功能至少需要一个客户端和服务端共同完成;

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

断线重连
状态同步的断线重连,就是把整个场景和人物全部重新生成一遍,各种数值根据服务端提供加到角色身上。
帧同步的断线重连就比较麻烦了,服务端要把断线时间内的所有消息一次性发给客户端,然后客户端加速整个游戏的核心逻辑运行速度(timeScale),直到追上现有进度。因为计算逻辑在客户端,一旦跳过某些帧数,很容易出问题。

帧同步注意点:
保证所有客户端的计算结果一致
1、要保证客户端的显示层和逻辑层是分离的。
2、不能用C#自带的随机数接口(需要通过服务端获取随机种子),float类型要换成int,因为非常微小的误差就有可能产生蝴蝶效应,必须保证计算结果一致。

ECS框架:Entity-Component-System
https://blog.csdn.net/zcaixzy5211314/article/details/84888743
https://blog.csdn.net/qq_41211553/article/details/108641814
ECS是一种用于处理数据关系的架构模式,用于组建并处理游戏中的数据和行为。
Entity:代表游戏中的实体,是 Component 的容器。本身并 无数据和逻辑。
Component:代表实体“有什么”,一个或多个 Component 组成了游戏中的逻辑实体。 只有数据 ,不涉及逻辑。
System:对 Component 集中进行 逻辑操作 的部分。

C# Job System:
https://www.cnblogs.com/sifenkesi/p/12258842.html
简化多线程:job system通过创建jobs来实现多线程,而不是直接创建thread。
job概念:完成特定任务的一个小的工作单元。
编写多线程代码可以提供更好的性能表现,C# Job System的一个非常关键的方面是它可以融入Unity内部的原生Job System。这使得用户的代码可以和Unity共享worker threads。这种合作避免了创建更多线程,因为这可能会造成对于CPU资源的争抢。

网络游戏开发之同步模式相关推荐

  1. 用 Unity 进行网络游戏开发(一)

    用 Unity 进行网络游戏开发(一) 这是我之前写的了,一直保存在电脑里,现在学习写博客.希望多和大家交流,共同进步,文章中说得不好的地方请指出,谢谢! 使用Unity3D进行网络游戏开发 一.Un ...

  2. 用Unity进行网络游戏开发(一)

    这是我之前写的了,一直保存在电脑里,现在学习写博客.希望多和大家交流,共同进步,文章中说得不好的地方请指出,谢谢! 使用Unity3D进行网络游戏开发 一.Unity3d简介      Unity3d ...

  3. 低成本动作捕捉解决方案及虚幻VR网络游戏开发

    大家好,我叫人宅,很高兴和大家一起分享一下本套直播课程. 课程名称:元宇宙VR技术研发 低成本动作捕捉解决方案及虚幻VR网络游戏开发 主要介绍: 在过去我们做动画,需要具备动画师能力才可以去做,K了一 ...

  4. 网络游戏开发流程管理

    尽管游戏的历史是悠远久长的,但人类把它当作一种理论研究对象却是在近代才开始的事.德国诗人和剧作家席勒在研究艺术起源的问题上曾以'艺术起源于游戏'的大胆一说而语惊四海.他认为,人类在现实生活中要受到精神 ...

  5. Siki_Unity_4-4_丛林战争_Socket/TCP网络游戏开发

    Unity 4-4 丛林战争(Socket/TCP网络游戏开发) 任务1:素材.演示.Prerequisite 使用c#的有关TCP的底层API进行服务器端的开发(直接通过socket进行通信) 功能 ...

  6. Stm32f030数字电源开发 Stm32同步buck降压数字电源

    Stm32f030数字电源开发 Stm32同步buck降压数字电源 同步BUCK设计规格 输入电压: 12-56Vdcid=630198771551& 输出电压: 0-50Vdc 输出电流: ...

  7. 网络游戏开发-进行设计

    网络游戏开发-进行设计 作者:老九-技术大黍 原文:Developing Games in Java 社交:知乎 公众号:老九学堂(新人有惊喜) 交流QQ群:197542621 特别声明:原创不易,未 ...

  8. 对GD32F450的ADC同步模式的理解

    对GD32F450的ADC同步模式的理解 文章目录 对GD32F450的ADC同步模式的理解 前言 一.对ADC同步模式的理解 二.ADC同步模式中使用DMA模式 0 三.代码 1.配置思路 2.AD ...

  9. 以太坊Geth几种同步模式

    链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 以太坊Geth几种同步模式 同步模式分类 –fast Enable fast syncing through s ...

最新文章

  1. 打电话化繁为简 网络电话直接省钱
  2. 对sigma pix 的理解
  3. python udp 传输文件_python网络编程:UDP方式传输数据
  4. boost::geometry::segment_view用法的测试程序
  5. 手把手教你用7行代码实现微信聊天机器人 -- Python wxpy
  6. C#进阶之WebAPI(二)
  7. 2017.10.23学习知识总结回顾及编写新网页
  8. IE 11打开之后一直提示“恢复非正常关闭的网页”,让后IE就卡死
  9. Centos7 安装 Kubernetes dashboard (安装篇)
  10. 小程序源码:独立后台带分销功能月老办事处交友盲盒-多玩法安装简单
  11. 室内导航html,室内定位导航地图一体化设计
  12. CCIE-重认证-300-410-补充题库-必须的哟
  13. 深入分析 RTPS协议
  14. python 有放回随机抽取_Python 随机抽样
  15. iOS定位从 “始终”定位,改变成“使用期间”定位
  16. 房屋安全鉴定报告的有效期及两种鉴定类型
  17. 如何将m4a格式音频转为mp3?
  18. 使用Python相关技术实现对一本中文小说(自选)进行词频分析,字数不低于10万字,显示小说中出现率前50的中文词组,并用图表展示。
  19. c语言菜单 键盘,三、Windows键盘快捷键—启用菜单项
  20. MFC界面开发工具BCG v30.6 - 全新网格/报表控件

热门文章

  1. 计算机启动时为啥总要检测硬盘,硬盘总是自检 开机后总是硬盘自检关闭方法...
  2. Win7系统关闭硬盘开机自检的三种方法(全面,简单好用)
  3. 京东左侧导航条练习笔记
  4. php中 session start,php session_start()出错原因分析及解决方法
  5. latex如何自定义图片的标题位置
  6. asp.net907-图形文件管理系统的设计与开发#毕业设计
  7. python基础知识(19)之MYSQL-MySQLdb
  8. MACOS10.15使用CrossOver安装Enterprise Achitect
  9. ubuntu输入法安装
  10. 深入解析ES6中的迭代器(Iterator)和生成器(Generator)