常见网络同步模型
1.C/S 模型 (Client-Server) : 状态同步
2.对等网络模型(Peer-To-Peer): 帧同步
网络同步数据类型
将数据分为四个类型
- 非保障数据(可丢弃)
- 保障数据(需要确保到达顺序,如发起攻击次序)
- 最近的状态数据(如特定玩家生命值,旧的生命值可覆盖)
- 最快保障数据(最高优先级,如移动信息)
一、C/S 状态同步网络模型
1. ghost管理器
2. 移动管理器
3. 事件管理器
由游戏模拟层产生的事件队列
*可以看作是RPC(远程过程调用)的一种简单形式
4. 其他系统
与网络不相关的游戏逻辑,如本地画面表现或本地存档等
二、对等网络模型
对比两种游戏类型RTS和FPS
| RTS | FPS | |
|---|---|---|
| 相关节点数量 | 多(50-400) | 少(20-30) |
| 方案 | 同步玩家命令 | 同步单元 |
对等网络模型采用确定性锁步(deterministic lockstep)
-
同步玩家命令难点
每一个实例独立执行玩家发出的命令,所有游戏实例之间需要保持同步
a.不同客户端帧速率不同
b.网络连接质量不同
综上,引入方法:轮班计时器(保证传输一致)
(1).基于网络情况动态调整渲染帧率
(2).滞后过多 -> 强行退出
(3).可在客户端直接保存命令,实现重播 -
同步
保证每台计算机计算结果一致
(1).随机
伪随机数生成器
a.种子一致
b.调用次数一致
c.调用顺序一致
(2).防作弊
a.行为作弊(修改当前角色信息,数据与其他客户端不一致)
b.地图作弊(查看本应该隐藏的其他玩家信息)
网络拓扑(network topology)
网络拓扑决定了网络中计算机之间如何连接
一、C/S拓扑结构
-
使用一台权威服务器(Authoritative Server)
客户端根据服务器的游戏状态更新自己的本地状态 -
产生延迟
往返时间RTT(Round Trip Time)
某一步游戏操作,最简化的数据传输 :客户端 -> 服务器 -> 客户端
往返一次的时间称为往返时间RTT -
服务器可被细分
a.专用的(dedicated):多个不同进程负责多个状态
b.监听(listen):可使用某个客户端作为计算游戏逻辑的服务器,若被指定为“逻辑服务器”的客户端断开连接,另一个客户端可被晋升为新的“逻辑服务器”,这一过程称为主机迁移(Host Migration)
二、对等网络拓扑结构
- 每个对等体共享所有动作(输入共享)
- 每个对等体都模拟这些动作的执行
- 对等网络拓扑结构存在的两个问题
a.如何验证对等体之间状态的一致性
b.如何同步随机数发生器