【游戏开发】多人游戏网络同步相关技术(基础原理篇)
常见网络同步模型
1.C/S 模型 (Client-Server) : 状态同步
2.对等网络模型(Peer-To-Peer): 帧同步
网络同步数据类型
将数据分为四个类型
- 非保障数据(可丢弃)
- 保障数据(需要确保到达顺序,如发起攻击次序)
- 最近的状态数据(如特定玩家生命值,旧的生命值可覆盖)
- 最快保障数据(最高优先级,如移动信息)
一、C/S 状态同步网络模型
1. ghost管理器
2. 移动管理器
3. 事件管理器
由游戏模拟层产生的事件队列
*可以看作是RPC(远程过程调用)的一种简单形式
4. 其他系统
与网络不相关的游戏逻辑,如本地画面表现或本地存档等
二、对等网络模型
对比两种游戏类型RTS和FPS
RTS | FPS | |
---|---|---|
相关节点数量 | 多(50-400) | 少(20-30) |
方案 | 同步玩家命令 | 同步单元 |
对等网络模型采用确定性锁步(deterministic lockstep)
同步玩家命令难点
每一个实例独立执行玩家发出的命令,所有游戏实例之间需要保持同步
a.不同客户端帧速率不同
b.网络连接质量不同
综上,引入方法:轮班计时器(保证传输一致)
(1).基于网络情况动态调整渲染帧率
(2).滞后过多 -> 强行退出
(3).可在客户端直接保存命令,实现重播同步
保证每台计算机计算结果一致
(1).随机
伪随机数生成器
a.种子一致
b.调用次数一致
c.调用顺序一致
(2).防作弊
a.行为作弊(修改当前角色信息,数据与其他客户端不一致)
b.地图作弊(查看本应该隐藏的其他玩家信息)
网络拓扑(network topology)
网络拓扑决定了网络中计算机之间如何连接
一、C/S拓扑结构
- 使用一台权威服务器(Authoritative Server)
客户端根据服务器的游戏状态更新自己的本地状态 - 产生延迟
往返时间RTT(Round Trip Time)
某一步游戏操作,最简化的数据传输 :客户端 -> 服务器 -> 客户端
往返一次的时间称为往返时间RTT - 服务器可被细分
a.专用的(dedicated):多个不同进程负责多个状态
b.监听(listen):可使用某个客户端作为计算游戏逻辑的服务器,若被指定为“逻辑服务器”的客户端断开连接,另一个客户端可被晋升为新的“逻辑服务器”,这一过程称为主机迁移(Host Migration)
二、对等网络拓扑结构
- 每个对等体共享所有动作(输入共享)
- 每个对等体都模拟这些动作的执行
- 对等网络拓扑结构存在的两个问题
a.如何验证对等体之间状态的一致性
b.如何同步随机数发生器
对等网络的两种解决方案
- 集中服务器(rendzevous server)
仅用于初始化通信,保证IP地址互相可访问 - 中央服务器
处理对等体之间的整个数据包路由过程
两个对等体之间互不知道公网IP地址,可阻止一个对等体通过分布式拒绝服务攻击的方式来断开另一个对等体。
*分布式拒绝服务攻击(DDoS:Distributed Denial of Service)
大量合法请求占用大量网络资源,以达到使网络瘫痪的目的。
三、可靠性:TCP还是UDP
1.TCP和UDP的比较
TCP | UDP | |
---|---|---|
可靠性 | 数据按顺序传递和处理 | 需要自定义实现 |
流量控制 | 如果数据包丢失,将自动降低传输速率 | 需要自定义流量和拥塞控制 |
内存需求 | 操作系统必须保存所有发送数据的副本,直到数据被确认 | 自定义数据的保存和丢弃,内存管理在应用层 |
路由器优先级 | 可能优于UDP数据包 | 可能在TCP包之前被丢弃 |
2.TCP
优点:稳定可靠,所有数据按序送达
缺点:
- 低优先级的数据丢失干扰高优先级数据接收
- 两个独立的可靠有序数据流相互干扰
- 过时游戏状态的重传
- 为管理连接和跟踪重传数据分配了很多资源
适合:回合制游戏,卡牌游戏,在线桌游等操作指令顺序稳定的游戏
3.UDP
缺点:数据不可靠,到达顺序不一定按照次序
方案:实现一个基于UDP的可靠系统
适用:大部分对实时性要求较高的游戏
原理:
- 发送端唯一标志每个数据包
- 接收端检查传入的数据包,针对每个包发送一个确认
- 发送端处理确认
其他:
*1. 构建一个InFlightPacket容器,跟踪所有尚未被确认的数据包
*2. 传入序列号:
a. 一致:正常处理
b. < 期望:不处理,不确认
c. > 期望:正常处理
*3. 多个数据包合并发送一个确认
UDP扩展:对象复制可靠性
- 不需要重传每个丢失的数据,而是仅仅发送丢失数据的最新版本
- a.应用程序定期询问Replication Manager 是否有需要重传的数据
b.找到相应的InflightPackage
c.写入当前对象的最新状态数据 - 根据“正在传输”的数据包优化
当包含最新数据的数据包正在传输,Replication Manager可监测传输状态,能避免发送多余状态
数据包:
a.已复制数据包Flag置为Dirty
b.循环遍历Delivery Map中每个Packet
c.找到对应的数据条目
d.比较网络标识符与当前数据标识符
e.判断是否重发
【游戏开发】多人游戏网络同步相关技术(基础原理篇)相关推荐
- 【游戏开发】多人游戏网络同步相关技术(设计篇)
一.C/S 状态同步网络实现 1.单个客户端连入服务器步骤 1.客户端状态未初始化 Uninit 2.客户端发送hello标志给服务器,并将状态设置为Saying Hello状态 3.服务器收到后分配 ...
- 【游戏开发】多人游戏网络同步相关技术(延迟处理)
非网络延迟(latency) 网络游戏中非网络延迟分类: 输入采样延迟(input sampling latency) 渲染流水线延迟(render pipeline latency) 驱动程序 -& ...
- Unite 2017 | 从《闹闹天宫》看MOBA游戏里的网络同步技术
http://mp.weixin.qq.com/s/0v0EU79Q6rFafrh8ptlmhw 在Unite 2017 Shanghai案例分享专场,来自蓝港互动<闹闹天宫>项目组的主程 ...
- 游戏中的网络同步机制——Lockstep(转载)
原文转自http://bindog.github.io/blog/2015/03/10/synchronization-in-multiplayer-networked-game-lockstep 0 ...
- 游戏中的网络同步机制(一)帧同步Lockstep
转载自:https://www.jianshu.com/p/64b3f162dcf4 参考游戏中的网络同步机制--Lockstep 一.前言 每个人或多或少都接触过网游,那个虚拟的世界给予了我们无穷的 ...
- 大白话总结类《王者荣耀》等MOBA游戏中的网络同步机制
案例游戏: <英雄联盟> <王者荣耀>等PVP游戏 实际解决方案: 同步机制:不锁步的帧同步 网络:传输层的UDP配合应用层的可靠性检验 以下从问题出发讨论解决方案. 主要问题 ...
- 天津大学计算机软件技术基础试题答案,天津大学网络学院计算机软件技术基础-1试题b卷.doc...
天津大学网络学院计算机软件技术基础-1试题b卷 计算机软件技术基础(1)复习题 一.判断题 1.VB编译生成的可执行文件不再需要工程文件与各个模块文件.( ) 2.VB程序中不区分代码字符的大小写.( ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第21讲:PHP运行原理及编程规范
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第21讲:PHP运行原理及编程规范 什么是Web站点,在网站建设中,必须明白apache和PHP在网络中的位置,书写和调试简单的PHP代码.本节对PHP运行原 ...
- Android自定义控件开发系列(零)——基础原理篇
在后边的文章中发现在说Android自定义时,有时候要重复解释很多东西,所以想想返回来增加一篇"基础原理篇",直接进入正题吧-- 首先的问题是:在Android项目开发中,什么时候 ...
最新文章
- 英特尔用ViT做密集预测效果超越卷积,性能提高28%,mIoU直达SOTA|在线可玩
- 索尼诺基亚持股公司告赢苹果,获300万美元赔偿
- 捉虫记 C++转java Java中equals和==的区别
- C/C++ struct 区别
- lustre1.6.5+drbd主备切换
- 如何将tensorflow-yolov3(YunYang1994).txt 坐标转换成yolo的标注(annotations)
- Android中贝塞尔曲线的绘制方法
- poj1251 Jungle Roads Kruskal算法+并查集
- Linux服务跟随启动,Linux—添加开机启动(服务/脚本)
- 1. 概述--从零起步实现基于Html5的WEB设计器Jquery插件
- b+树 b-树的区别
- mysql yum安装和 rpm安装_yum 和 rpm安装mysql彻底删除
- 段错误原理:Segmentation fault: 11
- powell法-鲍威尔法详解-附案例matlab代码
- XAMPP汉化教程指南
- 每年考证时间表(绝对会用得到的一天,怕到时候很难找到有用) ——自己留住,哦!!!!
- python经典实例应用_《Python经典实例(图灵出品)》([美]史蒂文·F.洛特)【摘要 书评 试读】- 京东图书...
- [ 2204阅读 ] 题型专项 - 句子简化题
- 02 推荐的起点:断物识人
- 北京大学可视化发展前沿研究生暑期学校Day1
热门文章
- 贪心算法:CodeForces-597B
- 基于springboot代驾网站毕业设计源码281031
- NIO 和 IO 到底有什么区别?别说你不会!
- 塑料袋检测_塑料制品检测_注塑件视觉检测方案
- 狂降1000!苹果最悲情产品大降价!
- 魅族mx四核即将使用android,魅族MX四核真机主板曝光 6月份即将上市
- 学习笔记(11):Java小白修炼手册-一句话在Java中如何表达?快学Java字符串
- 神仙思维导图:XMind的介绍
- 程序员是否可以在家办公——在家办公的利与弊
- 谷歌大胃王,欲占领所有渠道--谷歌电视