最近在做的游戏中要用到网络同步的相关知识,因此针对帧同步与状态同步中查询了一些资料,并且涉及了TCP和UDP在游戏网络同步中的一些优缺点的整理,在这里记录一下
帧同步与状态同步
帧同步:服务器负责转化客户端的操作,每个客户端在固定的逻辑帧执行该帧所有客户端的操作命令,通过严格一直的时间轴上执行同样的命令。
优点:可以无视客户端服务器,开发方便
打击感反馈好
网络流量小
缺点:
- 网络要求高,涉及到具体帧同步实现的方式:
锁帧问题:服务器会等待所有客户端的第N帧都到齐之后再发送到每个客户端其他客户端第N帧的操作。所以一旦有一个客户端卡住就会所有人都卡住。War3的做法是加入超时机制,如果第N帧没有受到某个客户端,就不再等待它,并认为它什么都没做
逻辑帧平滑问题:一般受到的逻辑帧命令数据会加入客户端正在顺序执行的逻辑帧队列中。如果队列过长延迟就会高,如果队列端在网络波动的时候就会出现队列空饥饿状态,造成逻辑帧不平滑,可以采用逻辑和表现分离,平滑插值等做法。
- 反外挂能力差
- 断线重连需要追帧
- 客户端计算压力大,要每逻辑帧计算所有游戏单位的逻辑状态,即使单位没有在屏幕内
- 对结果一致性控制严格
状态同步:
服务器承担所有计算,客户端只表现
优点:容易断线重连 容易防外挂
缺点:流量大,打击感反馈不准确,所有表现都是服务器推动的,在网络波动、客户端服务器不同计算的误差下,客户端各个表现难以契合
对网络要求比较高
网络优化的方法:1. 使用可靠的UDP代替TCP,降低延迟
- 在