# 网络同步基础
理解网络延迟为什么是游戏最大的敌人,三种同步模型各解决什么问题
前置知识:3_2_cs-fundamentals(TCP/UDP底层原理)
阅读指南(初学者必看)
为什么你需要学习网络同步基础?
网络同步是游戏开发最难的领域之一。60fps 游戏每帧只有 16.7ms,而一个网络往返延迟(RTT)是 60200ms——一个 RTT 等于 412 帧的延迟!不理解这些基础,后续的帧同步、状态同步、预测回滚都会像天书。
学完本章,你能回答:
- 为什么网络延迟是游戏最大的敌人?
- 网络抖动和丢包对游戏有什么影响?
- 帧同步、状态同步、预测回滚三种模型的核心区别是什么?
本文结构
第一部分:网络基础知识——延迟为什么这么难
第二部分:网络抖动与丢包——真实网络的恶劣环境
第三部分:三种同步模型概览——帧同步/状态同步/预测回滚的对比
第四部分:WebSocket基础——H5游戏的长连接方案
一、网络基础知识
为什么网络同步是游戏开发最难的领域之一?
物理世界:光速 30万km/s
上海到北京(1000km):理论延迟 3.3ms
实际网络延迟:30~100ms(经过多个路由器)
这意味着:
- 玩家按了按钮,30~100ms 后服务器才收到
- 服务器发回响应,又是 30~100ms
- 往返延迟(RTT):60~200ms
60fps 游戏每帧只有 16.7ms
一个 RTT = 4~12 帧的延迟!
二、网络抖动与丢包
理想网络:每包 50ms 到达
●─●─●─●─●─●─●─●─●─● 均匀
现实网络:延迟波动 + 丢包
●───●─●────●─●──● 50~150ms 抖动
●───●─●────×─●──● 偶尔丢包
三、三种同步模型概览
| 帧同步 | 状态同步 | 预测回滚 | |
|---|---|---|---|
| 传输内容 | 只传输入 | 传状态 | 传输入+校正 |
| 带宽 | 低 | 高 | 低 |
| 服务器计算 | 不计算(只转发) | 全部计算 | 校验+校正 |
| 客户端计算 | 全部计算 | 渲染+预测 | 全部计算+回滚 |
| 确定性要求 | 极高 | 低 | 高 |
| 反作弊 | 难 | 容易 | 中等 |
| 适用游戏 | RTS/格斗/MOBA | MMO/RPG/FPS | 竞技格斗 |
四、WebSocket基础
H5游戏最常用的长连接方案。WebSocket在TCP之上提供全双工通信,适合实时游戏。
// 客户端连接
const ws = new WebSocket('wss://game.example.com/room');
ws.onopen = () => {
console.log('连接成功');
ws.send(JSON.stringify({ type: 'join', roomId: '123' }));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
handleGameMessage(data);
};
ws.onclose = () => {
console.log('连接断开,准备重连...');
reconnect();
};
自问自答
Q:为什么不用 TCP 做游戏同步? A:TCP 的可靠有序特性会导致队头阻塞——一个包丢了,后面所有包都等着。而游戏对实时性要求极高,旧的位置数据到了也没用,不如用 UDP 自己控制可靠性。
Q:三种同步模型该怎么选? A:看游戏类型。需要确定性复现的(RTS/MOBA)用帧同步;服务器权威的(MMO/FPS)用状态同步;对操作手感要求极高的(格斗)用预测回滚。很多游戏会混用。
Q:网络抖动和延迟哪个更严重? A:抖动更难处理。延迟可以预测和补偿(客户端预测),但抖动是随机的,无法预测。抖动严重时,缓冲策略需要更大,导致操作延迟增加。
Q:为什么说 RTT = 4~12 帧的延迟?
A:60fps 游戏每帧 16.7ms,RTT 60200ms。60ms ÷ 16.7ms ≈ 4帧,200ms ÷ 16.7ms ≈ 12帧。这意味着玩家按了按钮后,要等 412 帧才能看到服务器的响应。
实践任务
- 任务1:用
ping命令测量到不同服务器的延迟和抖动,记录平均值和标准差 - 任务2:用 Wireshark 抓包观察 TCP 的重传行为和 UDP 的丢包情况
- 任务3:实现一个简单的延迟模拟器,在本地模拟 50ms/100ms/200ms 延迟 + 随机抖动
- 任务4:在延迟模拟器下,对比 TCP 和 UDP 传输游戏数据的体验差异
- 任务5:画一个三种同步模型的数据流图,标注每个环节的延迟
与其他章节的关联
| 本章内容 | 关联章节 | 关联点 |
|---|---|---|
| TCP/UDP 基础 | 3_2_cs-fundamentals | TCP/UDP 底层原理在本章直接应用 |
| 帧同步概览 | 第03章 帧同步Lockstep | 本章概述,第03章深入实现 |
| 状态同步概览 | 第04章 状态同步 | 本章概述,第04章深入实现 |
| 预测回滚概览 | 第05章 预测与回滚 | 本章概述,第05章深入实现 |
| 自定义 UDP | 第06章 自定义UDP协议与KCP | 理解 UDP 的局限性后,第06章自己造协议 |
| WebSocket | 第13章 弱网优化与实战 | WebSocket优化在第13章深入 |
上一章:01-系统设计方法论 下一章:03-帧同步Lockstep