jiazurongyu 发表于 2011-4-26 14:35:37

网游同步处理的重要性(第一章)

转自我自己的blog,希望能一起探索这部分问题:)
简单讲下游戏的结构,分为2部分:

客户端:玩家自主安装的游戏端,保存游戏资源的软件。这个软件具备接收和发出数据信息的功能。

同时也可以理解成是一个前端,将网络数据编译成游戏中可看见的图像给玩家,而把操作编译给服务端,让服务端进行处理。

在游戏公司里常说的开发套件,就是对于配置数据和资源进行编辑的工具软件。

服务端是1个大型加密的数据库,同时处理大部分逻辑事物。

客户端将遵守服务端的规则,并且帮助服务端处理部分信息缓存和次要信息。

服务端和客户端的关系是 好朋友~ 一对多关系也是多对多关系。

服务端群组 和 客户端 的主要关系是 服务端组 负责 客户端 的表现。

负责不同事务的服务端 需要各司其职 来保证客户端的运作。

想要保证一定的执行效率和效果,就需要准确的各司其职。

详细通信这里就不介绍了,网上也有介绍。

而就是因为这种网络中的行为,无疑会出现各种延迟的情况出现。因此在游戏内,将看到很多行为 需要数据同步。

例举一些搞笑场景:

玩家A投票购买了一批限量的道具,显示剩余数量为30件。

时隔10分钟后,玩家B也去购买了一批限量的道具,显示剩余数量为35件。

然而,且好这2名玩家是都认识的…好了穿帮了,不知内情的玩家觉得游戏公司是在忽悠他们买道具。



XXX挥泪大拍卖一样,结果今天是挥泪大拍卖,明天是跳楼价3天。好吧,不要让玩家的行为让系统去被动刷新,而不建立一个比较完善的机制。

关于多少时间去主动刷新一次,这里暂时不讨论,做法各有不同。

而因为进度忙,需求变更多而让系统被动去刷新的机制忌讳一刀切,比如界面用确认保存等终结来刷新1次本地数据,切换lab ,打开/关闭UI。



紧接着运营的一个活动,本来是特惠活动,当玩家购买一个礼包,礼包已购买数量+1。当购买数量到达1个数值时,全服获取一种新的礼物或者新的优惠政策。如果因为同步数据问题,将导致游戏公司一些诚信问题。实际上都是冤枉的。



那么玩家行为呢

玩家A在外场景看到好友玩家B,因为计算确切位置的延迟而导致,B远离了,而A的客户端没及时反映,这时候A去找B交易。客户端通过服务端发出验证信息,结果信息返回时,告诉你距离不够,或者无法满足。A崩溃了,B这时候进入了内景。

A的界面看到玩家B突然在他面前消失了,这时候玩家B出了内景切换到外景,A发现B凭空瞬移了,表现力有可能是平滑的,也有可能是瞬间出现的。

好吧,A崩溃了,觉得游戏有问题了。

诸如这类问题,会影响组队,技能释放判断,坐骑显示,甚至影响到美术模型下陷等。

这类问题影响可想而知,解决办法也不复杂。

产生问题原因网络有延迟,通信闪断等等。

关键在前期地图切割,算法,二端通信方面的优化。

※网络游戏数据同步问题

上描述的问题如何解决呢,我们首先要明确一个基本概念,就是游戏中所有参照数据,应该以服务端的数据为参照。

以上可知,客户端的参照数据是不准确的,客户端处理的是部分资源信息。客户端是用来反馈图形的,和主动去请求服务端。

cncnily 发表于 2011-4-27 14:48:00

写的非常好。同步不单纯是以上方面,很多方面都需要同步。
比如截取一个玩家A攻击玩家B的包后,就可以在这张地图玩家B看不到玩家A的地方攻击玩家B,这就是服务器和客户端坐标可能不一致,所以服务器端设置的攻击距离比较大。

adinQueen 发表于 2011-5-18 13:35:35

不错哦,受益了

jiazurongyu 发表于 2011-5-18 15:41:35

回复 2# cncnily

嗯说的很对,这个要大家一起来补充的
页: [1]
查看完整版本: 网游同步处理的重要性(第一章)