from: http://djt.qq.com/bbs/article-292-1.html
腾讯首款自研MMOG--QQ幻想网络同步算法揭秘
概述
游戏发展从单机游戏到局域网游戏再到mmog(Massive multiplayer online game, 即大型多人在线游戏),越来越强调玩家之间的互动。mmog形成互动的前提是游戏中的所有玩家认为他们是在同一个游戏世界中,然而这个同一个游戏世界真的 存在吗?答案是否定的,实际上,从不同的维度看,mmog中存在3种不同世界:
真实世界,也就是mmog服务器推演的游戏世界;
玩家自己的世界,是真实世界在玩家自己角度的一个映射;
其他玩家的世界,也就是真实世界在其他玩家角度的一个映射。
连接这3种世界的就是网络,如何通过网络同步这些世界之间的数据?网络存在延时,每个用户的上行/下行带宽有限制,服务器端和客户端计算资源有限,不同 mmog类型对于网络同步的要求也是不一样的(例如FPS类型的mmog要求延时尽量短),总之,我们应该根据限制条件和不同mmog类型的特点选择合适 的网络同步算法。
QQ幻想是腾讯自主研发的第一款Q版2D即时MMOG,公测时最高同时在线用户数达到66万,是国内非常优秀的一款资源MMOG。本文讨论QQ幻想网络同步相关思路和算法。
网络同步基本算法
MMOG网络同步需要考虑玩家及NPC移动信息同步、视野信息同步及其他状态信息同步,这些信息同步中以移动同步设计最为关键。
设计要点
客户端发出移动请求并附带寻路信息;
客户端发出移动请求的同时,自己立即移动所控制的玩家;
服务器验证路径信息,如果合法则合并存储路径并将路径转发给视野中的其他相关玩家,如果不合法则返回移动位置矫正消息给客户端将其拉扯到server所认为的位置;
玩家的移动速度由服务器控制并通知给相关玩家;
服务器每隔一定时间按照所存储的路径和玩家当前速度以及最后一次移动的时间改变其位置;
在一些特定处理时,例如移动速度改变、与距离相关的操作等,服务器立即计算并改变玩家的位置。
客户端和服务器之间存在网络延时,为解决网络延时带来的同步问题,QQ幻想中引入了移动消息序列号和路径补偿机制。
移动消息序列号机制
当服务器的位置调整协议还没有到达客户端时,网络上仍然有客户端发过来的移动请求消息,而影响服务器逻辑处理。在QQ幻想中通过每个移动同步消息携带一个序列号来解决此问题
服务器发送位置调整协议后,会将接收序列号做个较大幅度的变更,此后收到的移动请求消息如果序列号不同步则直接丢弃;
位置调整协议消息会带有调整后的序列号,这样客户端收到后也更新自己的移动起始序列号。
路径补偿机制
由于客户端和服务器之间存在网络延时,当服务器收到客户端请求包验证通过后进行路径合并时,有两种情况:
假设黑线段是服务器存储的上一次路径,绿线段是最新收到的路径信息,在原路径的(x1,y1)上改变路径。第一种情况是服务器上玩家的位置在 (x2,y2),没有到达(x1,y1),这时只需要把新的路径合并进来就可以。第二种情况就是服务器上玩家的位置在(x3,y3),超过了 (x1,y1),这时需要把多行走的距离折算到新的路径上,这种情况指的就是服务器的路径补偿,当然补偿的距离应该用速度和时间的乘积计算更准确。
同步算法的改进
上述的移动同步算法并不是QQ幻想的最终版本,在中国存在多家网络服务提供商(ISP),跨ISP通信时,网络丢包率和延时都比较大;当玩家跨ISP进行游戏时,例如网通接入的用户在电信的服务器上进行游戏,由于则被服务器验证路径失败而导致的回扯现象特别严重。
这个问题主要的原因是当玩家跨ISP进行游戏时,我们发现在服务器端特别容易出现粘包现象:
在客户端虽然发送的移动请求有一定的时间间隔,在服务器端收到这个请求时由于网络延时或网络丢包,其间隔与客户端可能不一致。当服务器端只以收到消息包 的时间作为请求发生的时间,进行条件判定时会导致一些问题。例如服务器端由于频率限制等原因默认有一个客户端的最小移动请求间隔,如果两个移动请求之间的 间隔比这个间隔还小,则认为非法,发出位置调整协议消息调整客户端玩家的位置,出现回扯。
一种解决方式是增加客户端的参考时间戳。客 户端的参考时间戳是指客户端发出请求时服务器端对应的映射时间,也就是说客户端角度的世界与服务器的真实世界应该存在一个时间上的映射关系,如果网络延时 不变,客户端角度的世界t1时间发生的事件在服务器端真实世界发生的时间是t1',则客户端角度的世界t1+Δt时间发生的事件在服务器端真实世界发生的 时间是t1'+Δt。
那么,如何建立这个时间映射关系呢?一般采用的方式就是使用客户端和服务器之间的对时机制。也就是在客户端和服务器建立连接后,使用特殊的对时消息交互获取一个时间上的映射关系。
服务器会对客户端的参考时间戳进行检查,以解决一些同步相关外挂带来的安全问题,例如会检查这个时间戳必须是递增的,时间戳之间的间隔必须大于最小的请求间隔等等。
总结
网络同步是MMOG设计中非常关键的一环,同步设计中视野管理、带宽管理、安全性等问题本文限于篇幅没有逐一展开,抛砖引玉,希望能激发同行对此话题更多的交流和碰撞。
相关推荐
### MMOG/LE培训PPT的关键知识点 #### 一、MMOG/LE的定义与目的 **MMOG/LE**(Materials Management Operations Guideline/Logistics Evaluation)是一种全球推荐的标准,用于材料管理和物流领域的评估与改进。其...
【腾讯游戏MMOG服务器架构】是腾讯游戏在开发过程中用于支撑大规模多人在线游戏的技术体系,其设计考虑了实时性、交流协作以及高并发的特点。在这样的架构中,服务器的物理和逻辑架构是核心组成部分。 **MMOG 特点*...
### MMOG中的一种负载均衡算法:综合分析与探讨 #### 引言 大规模多人在线角色扮演游戏(MMORPG)因其提供给玩家广阔的互动平台而受到广泛关注。这类游戏的特点在于支持成千上万的玩家同时在线,这无疑对服务器的...
### 基于P2P的MMOG中动态负载均衡算法 #### 摘要与背景 在巨量多玩家在线游戏(MMOG)中,传统的客户端/服务器(C/S)架构面临着诸多挑战,其中最主要的两个问题是服务器瓶颈以及对玩家数量的限制。近年来,随着点...
"Blue Shift - a turn-based MMOG-开源"是一款基于回合制的大型多人在线游戏(MMOG),它具有创新的游戏设计理念,可以在任何支持现代浏览器的设备上流畅运行。这种跨平台的特性使得玩家无论身处何处,都能方便地...
《Warrior MMOG》是一款基于SubSpace和Continuum游戏引擎的开源2D多人在线射击游戏。这款游戏设计为自上而下的视角,旨在提供一个既熟悉又充满创新的游戏体验。SubSpace是90年代末的一款经典在线射击游戏,以其独特...
该项目的核心理念是构建一个没有预设角色、没有非玩家角色(NPC)和幻想生物的环境,所有的游戏元素,包括房屋、机器甚至地形,都将由玩家亲手创造。 首先,让我们深入理解“Medieval Online”的设计哲学。游戏设定...
### 一种适于MMOG的轻载服务器寻找算法及分析 #### 一、引言 随着互联网技术的发展,大型多人在线角色扮演游戏(MMORPG)已成为在线娱乐的重要组成部分。这类游戏的特点在于支持大量的玩家同时在线,享受游戏体验...
这个项目的名字不是在开玩笑,而是在同性恋时期玩大型多人在线游戏的名字。 整个游戏可通过XML轻松自定义,以满足您的需求
结构化的P2P网络通过预先定义的算法确保网络的稳定性和效率,例如DHT就是其中的一种。这类网络能够根据网络状态自动进行路由选择,有效降低网络拥塞,并确保数据传输的高效率。 #### 四、典型的应用层多播方案 ...
3. **同步机制**:游戏世界的状态需要实时同步,这就需要高效的同步算法,如时间切片、状态压缩、预测修正等,确保玩家的动作和环境反应一致。 4. **数据库管理**:存储玩家数据、游戏世界状态和历史记录,需要使用...
腾讯作为中国乃至全球领先的互联网综合服务提供商之一,其产品线覆盖了即时通讯、社交网络、数字媒体、电子商务等多个领域。本文旨在对腾讯的主要产品及其相互之间的关系进行梳理与分析,以便更好地理解腾讯在各个...
针对MMOG中的服务器超载问题,提出一种动态负载共享算法,使得一个超载的服务器能够方便地将它的一部分负载迁移到没有超载的服务器上。同时在基于预订区域概念的基础上,通过扩大邻居服务器的范围,提出一种客户端...
随着网络游戏的迅猛发展,大型多人在线网络游戏(MassiveIy Multiplayer Online Games,MMOG)对服务器的要求越来越高。通过对服务器集群和网络负载均衡算法的深入剖析,结合动态网络负载均衡算法--加权循环算法,给...
在当今的网络游戏环境中,玩家经常需要在不同的服务器之间切换,以寻找最佳的游戏体验或者与朋友一起游玩。传统的游戏客户端通常不提供这种“透明切换”服务,而MMOG Launcher填补了这一空白。通过这款启动器,用户...
这表明Frantic包含了游戏开发的基本组件,如网络同步、场景管理、角色动画、物理引擎等,这些对于制作一款成功的MMOG至关重要。 开源软件的标签意味着Frantic的源代码对公众开放,开发者可以自由地查看、使用、修改...
2. **网络通信**:KBEngine内置了网络通信模块,可以处理TCP/IP协议,确保游戏数据的安全传输和实时同步。 3. **数据库集成**:游戏服务端通常需要与数据库交互存储玩家信息和游戏数据。KBEngine支持多种数据库接口...
传统的MMOG通常采用客户端/服务器(C/S)架构,这种架构下,所有玩家的游戏数据都需要通过中央服务器进行处理和同步,这虽然可以确保数据的一致性和安全性,但也带来了几个关键问题: - **可扩展性问题**:随着玩家...