帧同步原理

一.常见游戏同步方案

同步问题的本质是一致性的问题,在同一局多人游戏的过程中,玩家A看到玩家B的状态,应该跟玩家B自身看到自己的状态相一致。延迟是造成不一致的本质原因,假设理想情况下双方的网络时延都为0,那两者应该是同步的,但是在现实情况中,往往是不可能的,本文讨论的同步机制,就是为了解决一致性问题而产生的,对于不同的游戏类型,不同的团队技术积累,可以根据自身情况采取不同的同步机制技术方案。

1、状态同步


状态同步主要是指客户端发送游戏动作到服务器,服务器收到后对游戏行为结果进行计算,
然后通过广播下发游戏各种状态到客户端,客户端受到状态信息后进行UI层展示或处理。
这种方式类似于核心逻辑计算都在服务器端进行,客户端主要负责上传操作动作等请求数据,
一般回合制游戏主要采用这种方式

CA SERVER CB 发送攻击B 计算操作结果等数 发送被A攻击打击动作 更新B新的血量为100 更新B新的血量为100 CA SERVER CB 状态同步基础模型

2、帧同步


客户端发送游戏动作到服务器,服务器广播转发所有客户端的动作(或者客户端直接通过P2P技术发送),客户端根据收到的所有游戏动作来做游戏运算和显示。这种做法等于客户端之间互相远程控制其他客户端上的游戏软件。早期的IPX网络游戏,如红色警戒、帝国时代、星际争霸,甚至大量的支持网络连线双打的游戏机模拟器,都是这种方式

CSA Relay Server CSB 逻辑帧N开始 发送操作A1 发送操作B1 逻辑帧N结束 对逻辑帧N打包为P 发送P到CSA 发送P到CSB 根据P的信息进行 逻辑计算UI展示 根据P的信息进行 逻辑计算UI展示 推进时间轴 CSA Relay Server CSB 帧同步基础模型

二、帧同步技术基础概念


1.基础概念

同的输入+相同的时机 = 相同的显示
意思是如果我们的游戏,接受了来自网络的多个客户端的操作,如果这些操作在各个客户端是一样的,那么多个客户端的显示也就一样了,这就带来了“同步”的效果。所以在这种情况下,各个客户端的运算要绝对一致,不能依赖诸如本地时间、本地随机数等等“输入”,而要一切以网络来的操作数据为主

简图

1.MOBA类游戏基本服务器架构

一般的方式是玩家先登陆大厅服务器,认证成功后选择游戏组队功能会通过Match Server进行进行玩家匹配,匹配成功后单独建立一个游戏房间服务器进行对战。

在这里插入图片描述

2.通信方式

通信方式主要有http 和socket两种方式,但http底层也是采用socket实现,区别是http每次通信完毕都会断开链接,这种对于频繁交互的应用效率较低,所以对于网游客户端一般http主要用于非高频低实时类通信,如登陆请求,局外物品购买,签到等,所以游戏实时性要求较高的高频交互部分都是采用socket方式通信。

socket通信又分为两种 TCP - UDP具体采用那种socket类型需要结合具体游戏类型来定,以下为两种协议的对比。

对比项TCPUDP
连接有连接无连接
可靠性可靠、有序不可靠,无序
数据包自动拆包手动拆包
流量流量控制手动
速度
控制简单复杂

通过上图可以发现,对于socket 我们想做的事情tcp都帮我们处理了,我们需要做的就是建立连接,然后调用API函数收发数据既可,如果采用UDP的话需要我们自己处理这些东西。简单的说就是自己对UDP进行处理模拟TCP,看到这里大家可能以为一定会采用TCP来进行通信,事实是基于游戏场景不同使用的通信协议也可能会不一样,例如王者荣耀是采用UDP来进行通信,腾讯的多数长连接手游也主要是采用UDP.

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值