网络游戏同步法则

JavaScript China城市联动 中国全城市的地址省,市,县 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title></title> <script src="jquery.js"></script> <script src="json.js"></... 阅读详情

         from:http://www.cppblog.com/keigoliye/archive/2009/09/12/95986.aspx

        网路的硬件也有限,而人的创造也无限,在公网平均130ms的Latency下,是不存在“完全的”的同步情况。如何通过消除/隐藏延时,将用户带入快速的交互式实时游戏中,体验完美的互动娱乐呢?

以下六点,将助你分清楚哪些我们可以努力,哪些我们不值得努力,弄明白实时游戏中同步问题关键之所在,巧妙的化解与规避游戏,最终在适合普遍用户网络环境中(200ms),实现实时快速互动游戏:

1. 基本情况:
   (A) 网络性能指标一:带宽,限制了实时游戏的人数容量
   (B) 网络性能指标二:延时,决定了实时游戏的最低反应时间

2. 两个基本原则:
   (A) 让所有的用户屏幕上面表现出完全不同的表象是完全没有问题的。
   (B) 把这些完全不同表象完全柔和在一个统一的逻辑中也是完全没有问题的。

3. 同步的十二条应对策略:
   (A) 最大可能减少游戏中的数据传输
   (B) 将阻塞通信放到线程池中实现
   (C) 永远不要为了等待某个数据而不让游戏进行下去
   (D) 利用预测和插值改进游戏的效果
   (E) 当使用预测插值的时候传送的数据不仅包括坐标,还需要速度和加速度
   (F) 将输入数据枷锁或者队列化(例如键盘消息队列),直到下次发送数据的时刻,传统的方法是在固定的时间(发送数据前)检测键盘,在游戏的原理上隐藏延时
   (G) 使用事件调度表,将需要在所有用户客户端同时发生的事件,提前广播到所有用户
   (H) 使用多次攻击来杀死一个精灵,尽量减少一次性的、确定性的、延时敏感的事件
   (I) 延长子弹或者火箭在空中飞行的时间(在其飞行的同时,在所有客户端进行预测插值)
   (J) 所有物体从一个地方移动到另外一个地方都需要时间,避免诸如“瞬间移动”的设计
   (K) 尽量使游戏中所有精灵,飞船或者其他物体,都按照可预测的轨迹运行,比如在移动中增加惯性
   (L) 充分发挥创造力,尽最大可能的合并游戏中前后相关的事件,合并游戏中存在的延时此问题,需要在技术上改进的同时也需要策划有所重视,规避一些影响较大的设计,巧妙的隐藏"延时"

4. 同步问题现状:
   (A) 重视程度不够:很多人尚未意识到此问题的存在,曾有公司花半年时间打算做一款“松鼠大战”的网络版。
   (B) 技术上无彻底解决方案:对于多数程序员,单机游戏技术善未成熟就匆匆步入网络时代。
   (C) 研究这个技术需要条件:需要有实力的公司才能提供,无此条件,即便有能力的程序员也无法成功。

5. 目前网游的三大技术难题:
   (A) 服务器的响应问题:如何使服务器在支持越来越多的人数的情况下提供最高的响应。
   (B) 同步问题:如何在有限的网络响应情况下,实现快速实时类游戏,提供最完美的交互。
   (C) 服务器分布式问题:如何在统一用户数据的情况下,利用分部式将各个分散的“世界”统一到一个“世界”中。
   谁能真正解决好以上三个问题,配合策划在设计上的突破,将使其他人在至少两年内无法超越。
  
6. 相关补充:
   (A) 网格技术现在还是抄作,真正用到游戏中,还有很多技术难点需要突破(比如:目前网格的单位计算时间是以秒计算).
   (B) 其实与很多人想法相反的是现在3D技术早已不是主要的矛盾。而现在国内外对于以上三个问题可以说处于同一个起跑线上,完全有机会取得先机。
   (C) 现在解决同步问题已经很紧迫,而同时所需要的环境也已经成熟,只要有所关注,半年之内可以得出较成熟的结论


那么具体怎么解决呢?再下一步怎么办?
这就得自己去实践了,我只说这么多了,哈哈,不然又教懒了那些成天再网上搜方案的人。



MMO的同步策略目前已经没有什么秘密可言了,简单叙述下各要素:


MMO人行走:MMO中如果是鼠标点击行走传目的地+中间寻路接点就行了,服务器简单验证一下。如果是键盘控制行走的话,需要做简单的预测插值。

MMO打怪:要看怎么个打法,客户端根本不必管服务端什么时候传来消息,直接演示动画就行了,最好把被砍的过程动画做长一点,可以在播放动画的过程中等待服务器传过来的延迟敏感事件,比如--该人已死。这样处理起来比较容易,最重要的是客户端看起来要流畅。

MMO插值:所谓“把不同表象柔和在一起”算法很多,简单的可以参考DR,位置不同的时候可以做一次线性插值,直接把人拉扯过去,或者二次线形插值,做一条平滑的曲线修正,看具体项目选择了。

时钟:就是时钟同步,所有时钟都是以“贞”为单位的,服务器主逻辑循环可以是5-10fps,多则无益,客户端同样维持一个和服务端频率相同的消息同步贞。

时间贞:把ping值加到时间计算里面是多余的,按贞计算的话,服务端告诉客户端在n贞发生xx事件的时候,客户端收到的时候如果客户端贞数大于n,说明是发生过了的,那么做插值,如果小于n,说明是未来发生的,那么加入时间表。


1 游戏中的行走,则是一个需要同步的重头戏,当今游戏分成两种同步方式,一种是以服务器端为准,如果发现客户端的坐标和服务器的坐标不符合的话,则拉回。这点的好处是可以弥补瞬移外挂的出现,但在网络环境差的情况下,则出现游戏不流畅。

所以,我比较推荐使用以客户端计算为准的方法(当然是我因为我这个游戏对游戏流畅性要求很高),客户端向服务器发送计算好的数据,服务器经过一定的预测判断,广播给其他玩家,这个虽然是能引起和wow一样的问题,瞬移外挂,但完全可以从游戏设计方面进行根本避免。(这里就不谈策划方面的问题了)

2 游戏的战斗,战斗的同步性要求也相当高,这里我也引用楼主说的,在固定时间检测键盘,以一定频率发送攻击消息,这里有一个关键,就是服务器和客户端都进行攻击判定,即使服务器中没有攻击判定成功,但在客户端判定成功,也要播放攻击效果。不过一切计算效果以服务器为准。这是一个欺骗玩家的手段。

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解 摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重 阅读详情

相关推荐

CAN基础知识

CAN基础知识

shouchen1的博客 9145

FreeRTOS + LWIP项目避坑:你的tcpip_thread优先级真的比ethernet_input高吗?

本文深入分析了FreeRTOS与LWIP在STM32H743平台上实现百兆网速传输时常见的'pbuf_free: p->ref > 0'断言错误。通过揭示线程优先级配置的关键原则,指出必须确保tcpip_thread优先级高于ethernet_input,并提供详细的配置建议和优化策略,帮助开发者避免网络数据传输中的调度陷阱。

weixin_30770783的博客 370

【Telephony】Telephony总纲!Phone进程流程(AOSP)

整个Framework层的Telephony框架运行在一个叫做Phone(com.android.phone)的进程中。 Phone进程启动的过程中,会初始化非常多的分支功能,SIM卡流程初始化就是其中之一,所以我觉得有必要写一下Phone进程的框架

weixin_44513784的博客 1975

网络游戏知识——【同步算法】

同步是网络游戏的一大难题,不同类型的游戏对同步有着不同程度的要求,如何解决好同步产生的问题?同步方案(帧同步,状态同步,状态帧同步)的区别和联系?网络传输协议(TCP,UDP,可靠UDP)的区别和联系?下面就让我们一起来学习下吧。

qq_53045580的博客 1941

R3LIVE 1.0 适配 Velodyne 16线雷达:3步配置解决150米漂移问题

本文详细解析了R3LIVE 1.0适配Velodyne 16线雷达时出现的150米漂移问题,并提供三步配置方案。通过调整雷达类型设置、运动补偿与时间对齐、视觉-激光联合优化等关键参数,有效解决了系统漂移问题,提升定位精度。适用于机器人定位与建图领域的开发者。

weixin_29054195的博客 268

[Python] -项目实战10- 用 Python 自动化批量重命名文件

本文介绍了使用Python实现文件批量重命名的技术方法。主要内容包括:1)使用os和pathlib模块进行基础文件操作;2)提供多种实用脚本示例,如添加序号、替换字符、添加时间戳等;3)进阶功能包括用户输入和错误处理;4)GUI工具实现方案;5)常见问题与优化建议。文章详细讲解了从简单到复杂的批量重命名实现方法,帮助读者快速掌握这一提高工作效率的技能。建议开发者注意路径处理、错误管理等细节,确保脚本稳健运行。

每日出拳老爷子的博客 815

Zynga秘诀:玩家最初的三次点击造就一款成功游戏

  Zynga 在社交游戏领域的成功已毋需多言,他们现在有更加长远的计划——摆脱对 Facebook 的依赖,打造自己的社交游戏平台。毫无疑问,Zynga 的强大之处在于对玩家游戏心理的把握,使得 Zynga 开发的多款社交游戏在短时间内聚集了大量用户。那么,Zynga 的秘诀是什么呢?周二发布社交游戏平台 Project Z 时,Zynga CEO Mark Pincus 谈到了这个话题。他表示...

编程代码大全 296

【短距离通信】【WiFi】精讲802.11n/ac/ax mpdu和ampdu最大长度

在 Wi-Fi 标准(802.11n、802.11ac 和 802.11ax)中,和是数据传输的核心概念。理解它们各自的作用以及不同标准下的最大长度限制,有助于深入了解 Wi-Fi 的性能优化机制。以下是对802.11n802.11ac和802.11ax中MPDU和A-MPDU最大长度的详细技术分析和对比。1. MPDU 和 A-MPDU 的基本概念MPDU 是经过 MAC 层处理后的数据单元,主要由MAC层数据帧和物理层的传输头部(PHY headers)组成。

风云说通信 1108

网络游戏网络同步方案的选择

随着电子竞技的快速发展和移动互联网的迅速崛起,手游的市场份额月来越高,不但各种原创的手游被开发者开发出来,甚至许多流行的端游也被开发者移植到手机上来,如今手游的类型多种多样,从单机到rpg,slg策略游戏,卡牌游戏弱交互游戏,以及rts,mmorpg,moba等重型多人在线游戏,其网络同步方案各有各的特点,到底如何选择游戏的同步方案呢?我们先来介绍一下常见的同步方案。 一.p2p模式 ...

D_Guco的专栏 1万+

Claude Code 100个真实案例 - 用AI搭建LangChain多工具Agent(自主搜索+查询)

本案例展示如何使用 Claude Code 搭建一个 LangChain 多工具 Agent 系统。Agent 能够自主决定调用搜索引擎、数据库查询、天气查询、计算器等工具,像人类助手一样拆解问题并逐步解决。

yueyeguzhuo的专栏 558

LLC谐振变换器软启动,不只是“慢启动”,还是“智能启动”

LLC谐振变换器的软启动,不只是“慢慢来”,而是要在控制时序、限流、响应速度之间精妙权衡。而数字控制,特别是用查表法或混合信号法,为实现真正的“最佳轨迹”提供了可能。✨小Tips:如果你的系统成本敏感,选择查表法准没错;如果你的设计目标是超高速响应,那就上混合信号的高配方案!

weixin_43199439的博客 691
上一篇: as3 webgame 经验交流群
下一篇: erlang log4erl日志记录
jamesjun
博客等级 码龄19年 25粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值