如何“漂亮”地解决dota类游戏网络延迟同步?
发表于2016-01-27
主流的同步方案有两种:帧同步和CS同步。
补充一个观点:CS和帧同步其实各有有优缺点,并不是某一项方案一定能够取代另一项方案,当游戏类型对实时性要求很高时(比如,实时格斗、体育竞技类游戏(NBA2K)),帧同步可能就是唯一的方案了。
以下是解决方案
概念定义:
1、ArenaServer
2、ArenaServer[预表现层]
3、ArenaClient:ArenaInput+ArenaRender
4、FrameServer
补充一个观点:CS和帧同步其实各有有优缺点,并不是某一项方案一定能够取代另一项方案,当游戏类型对实时性要求很高时(比如,实时格斗、体育竞技类游戏(NBA2K)),帧同步可能就是唯一的方案了。
以下是解决方案
概念定义:
1、ArenaServer
- 战斗核心逻辑及数据所在
- 不关心表现
- 由客户端的输入驱动运行
- CS同步架构里,这个部分是在服务器的
- 帧同步架构里,这个部分是在客户端的
2、ArenaServer[预表现层]
- 战斗的预表现层,一定在客户端
- 对于一些需要本地预表现的逻辑,如行走。需要先在这里模拟实现。
- ArenaServer的真实数据反馈到预表现层后,会修改本地数据。
- ArenaClient只知道预表现层,并不知道真正的ArenaServer的存在。
- 所以,当游戏要改变同步方案时,Client层并不需要修改。
3、ArenaClient:ArenaInput+ArenaRender
- 负责客户端输入和渲染
- 只与预表现层交互
4、FrameServer
- 以每秒30次(假设)的频率,收集各个客户端上报上来的ClientInput。
- 组装为FrameInput,广播给各个客户端。
- 即为帧同步的服务器所有逻辑