游戏开发的网络模块 - - 理论篇
网络同步
网络同步:
尽可能减少同步的数据量:
a.在对象第一次同步的时候将完整的对象信息同步过去,后续只同步那些发生改变的数据
b.对协议内容进行优化,比如不需要可靠的同步消息可以使用UDP,减少一些校验等
c.某些复杂的数据内容可以只传递简单的数据信息,然后不同的客户端以及服务器通过算法在本地计算出结果
P2P同步与服务器同步 :
同步策略:时间轴同步、帧同步
p2p时间轴:
a.常规同步:A发送消息同时马上执行,B收到消息后执行
b.约定同步:A发送命令消息和发送的时间戳,B收到执行,A根据网络状况预测B收到的时间与B同时执行;或者A发送命令同时告诉B应该在哪个时间戳执行,B收到后在与A商量好的时间戳执行;
P2p帧同步:A执行N+1帧需要B在第N帧的数据,B执行完N帧A才能执行第N+1帧。
服务器时间轴同步:
这与P2P基于时间轴同步策略是相同的,不过因为中间多了一道程序,延迟还可能有所增加。
服务器帧同步:
锁帧:服务器收集所有客户端的命令,对于没有发送命令的客户端进行锁帧。
帧同步优化:“乐观锁”->服务器不等客户端是否发送帧操作数据,每个一段时间就广播给所有的客户端。
网络模块:
网络游戏开发中我们通常接触的是应用层(游戏逻辑,Socket处理)与传输层(TCP,UDP)