因为网络同步这块只是学了点理论基础,面试时候被问的很细,才发现自己这方面只是了解了皮毛,所以这里单独开个帖详细学一下,然后做一个Demo来巩固一下。
理论学习:是知乎这篇文章,主要是这篇文章举的例子很容易理解,大家可以看一下。
帧同步怎么理解?
根据上面知乎举例,可以这么理解,老师每天晚上来收集每个同学的作业,收集完成后,分发给所有同学,让同学自己去批阅作业,如果是老师自己批阅打分就是状态同步,所有同学打分机制都是一样的,这样才能达到相同的结果。
严格帧同步
就是老师得把所有同学作业都收上来才行,否则大家都不能批作业。
帧同步与状态同步差异
帧同步
客户端发送指令,并接收指令,游戏逻辑在客户端。服务端只负责转发,不存在具体逻辑和状态信息,客户端发外挂能力弱,流量带宽小(只发送指令),对于已存在单机游戏容易直接开发,对客户端开发人员要求强,误差容易积累
状态同步
客户端只上传指令,接收所有客户端的状态信息,逻辑全在服务端,只负责展示功能,客户端反外挂强(逻辑都在服务端),肯定是同步的,然后的占用带宽很大(逻辑全在服务端,服务端压力会很大,并且状态信息很多),单机游戏转成状态同步大部分代码要移植到服务端,
乐观帧
- 传统帧同步,服务端要收集到所有客户端指令才会分发,延迟好的玩家必须等待延迟差的玩家。随意有一些优化手段(
比如超时机制,如果超时那么服务端就不等这个客户端了,直接分发给客户端,但是依然存在超时这个时间
)。 什么事乐观帧:
服务器控制逻辑帧率(控制逻辑帧率+1,由服务器推进游戏的进行),2个帧间隔客户端只要有操作指令就会上传给服务器,服务器收到这一帧所有的指令进行分发,这有几个好处:1、客户端没操作就不上传、客户端不用控制帧率、不需要等延迟差的玩家