网络游戏同步法则
网络游戏同步法则:http://www.skywind.me/blog/archives/112
网络游戏同步法则
--skywind
- 基本情况:
网络性能指标一:带宽,限制了实时游戏人数容量。
网络性能指标二:延时,决定了实时游戏的最低反应时间。
- 基本原则:
1. 所有用户屏幕上表现出完全不同的表象是完全没问题的。
2. 把这些表象完全柔和在一个统一的逻辑中也是完全没问题的。
- 同步的应对策略:
1. 最大可能减少数据传输。
2. 将阻塞通信放到线程池中实现。
3. 永远不要为了等待某个数据而不让游戏进行下去。
4. 利用预测和插值改进游戏效果。
5. 当使用预测插值的时候传送的数据不仅包括坐标,还需要速度和加速度。
6. 将输入数据枷锁或者队列化(例如键盘消息队列),直到下次发送数据的时刻,传统方法是在固定的时间(发送数据前)检测键盘,在游戏的原理上隐藏延时。
7. 使用事件调度表,将需要在所有用户客户端同时发生的事件,提前广播到所有用户。
8. 使用多次攻击来杀死一个精灵,尽量减少一次性的、确定性的、延时敏感的事件。
9. 延长子弹或者火箭在空中飞行的时间(在其飞行的同时,在所有客户端预测插值)。
10. 所有物体从一个地方移动到另一个地方都需要时间,避免“瞬间移动”的设计。
11. 尽量使游戏总所有精灵、飞船、或者其他物体,都按照可预测的轨迹飞行,比如在移动中增加惯性。
12. 充分发挥创造力,尽最大可能的合并游戏中前后相关的事件,合并游戏中存在的延时问题,需要在技术上改进的同时也需要策划有所重视,规避一些影响较大的设计,巧妙地隐藏“延时”。
- 同步问题现状:
1. 重视程度不够:很多人尚未意识到此问题存在。
2. 技术上无彻底解决方案:对于多数程序员,单机游戏技术尚未成熟就匆匆不如网络时代。
3. 研究这个技术需要条件:需要有实力的公司才能提供,无此条件即便有能力的程序员也无法成功。
- 目前网游的三大技术难题:
1. 服务器响应问题:如何使服务器在支持越来越多的人数情况下提供最高的响应。
2. 同步问题:如何在有限的网络响应情况下,实现快速实时类游戏,提供最完美交互。
3. 服务器分布问题:如何在统一用户数据情况下,利用分布式将各个分散的“世界”统一到一个“世界”中。