加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

风靡全国,日活8000万,《王者荣耀》后台技术架构演进!

发布时间:2017-10-12 16:12:11 所属栏目:经验 来源:游戏葡萄微信
导读:副标题#e# 这个曾经在端游时代主导搭建 RTS 游戏《霸三国》框架的技术团队,在转型做 MOBA 手游《王者荣耀》后为游戏提供了巨大的支持,但这个过程也并非一帆风顺。 在今年刚结束的腾讯 TGDC 上,《王者荣耀》技术总监孙勋在技术专场中,对这款游戏进行了一

整体结构比较像 MMO 的三层结构,MMO 在腾讯有比较典型的三层级别结构。大厅服务器会根据玩家所在区,登录具体区的大厅服务器。

单个大厅进程可以承载 2 万人,单个 PvP 可以承载 1.2 万,小区登录微信一区还是二区就是角色 Logo,打在玩家身上。

《王者荣耀》现在外网有四个大区,比如 Android 手 Q、Android 微信、iOS 手 Q、iOS 微信,此外还有抢先服。

我们会用程序开关的方式,在大版本发布之前,优先更新抢先服,这时候它不能和正式服玩家匹配在一起,因为他们的版本不一致。当全服发布之后,它的版本更新一致之后,我们会打开开关,抢先服的玩家可以和正式服的玩家一起进行 PvP 的匹配。

除此之外,我们还有专门的体验服,是给策划验证相关设计的,体验服保留可能删档的操作,但在正式环境这是绝对不允许的。

另外,以前的传统手游偏单机,就会做很多协议兼容,客户端版本没有更新可以玩。但是《王者荣耀》里的主要玩法是 PvP,同时结合实现方式,不同版本的玩家不能匹配一起,所以我们没有做多版本协议兼容。

风靡全国,日活8000万,《王者荣耀》后台技术架构演进!

上线后的调整

上线后,《王者荣耀》本身的后台架构,整体上没有做太大的改动,因为我们做端游的时候,对这套结构比较清楚,我们知道哪个地方可能有什么样的问题,所以整个结构一直比较稳定。

但是我们做了相应的微调,做得最多的是网络本身的优化。《王者荣耀》上线的时候,市面上要求网络及时性强的即时 PvP 游戏是比较少的。

我们做了各种各样的尝试,比如在网络做 CPU 方面的性能优化、延迟、丢包等等,网络本身花的时间是最多的。

架构上的微调,像刚才提到的中转模块,我们架构中大厅机器很多,PvP 机器很多,架构中不需要每个进程知道详细信息,比如大厅服务器不需要知道后面有多少房间服务器,只需要知道后面有房间服务器,可以访问就 OK。

怎么划分、平衡负载、怎么屏蔽后端故障节点,都是由 Proxy 路由功能在负责。因为大厅、PvP 机器太多,我们通过 Proxy 将整个架构划分成彼此之间没有交集的“树枝”概念,每组 Proxy 只负责一部分的大厅和PvP服务器。

这两种服务器在《王者荣耀》服务器里面最多,但是后端通联之外,Proxy 之间再建立连接,减少单个 Proxy 通道数的同时,保持整个结构的通联。

Proxy Adapter 是上线后加入的,最开始上线只有四个大区,手 Q、微信、Android、iOS 四个环境,最早 Android 的玩家也不能和 iOS 开黑。

开始 Android 和 iOS 分开也有一定原因,我们之前设想 Android 会先更新,iOS 后更新,以保持版本更新的稳定性。但后来我们希望 Android 和 iOS 的玩家可以因为关系链一起开黑。

所以当 Android、iOS 版本更新频率一致时,我们希望不需要部署太多额外的机器资源和开发,直接利用 Android 和 iOS 已有的 PvP 服务器和大区资源,打通 Android 和 iOS 的 PvP。

当 Android 玩家登录 Android 大区会连接到 Android 大厅,iOS 登录之后连接 iOS 大区的大厅,当他们需要开黑的时候,我们通过 Adapter 把中转模块所有的大区桥接起来,通过一定的算法投递到某个大区。投递的选择和大区资源占比有直接关系。

网络同步方案

风靡全国,日活8000万,《王者荣耀》后台技术架构演进!

之前做《霸三国》的时候采用 Client-Server 的模式,服务器判定客户端表现,那为什么我们在做《王者荣耀》的时候选用帧同步的方式呢?

Client-Server 模式的好处在于:

首先,安全。因为都是服务器计算,客户端只是负责表现层面的功能,不会影响各种判定的结果。

另外,Client-Server 模式因为是基于结果的表现,所以中间可以出现丢包,丢包是可以被接受和处理的,只要最终结果补发一致即可。

帧同步在端游用得比较多,大家比较熟悉的 DotA,还有《星际争霸》,都是用的帧同步技术。

帧同步本身对网络要求更加严苛,下发的执行序列是不允许丢包的,需要严格保证顺序性,包是 12345,就必须是 12345,如果丢包,必须要等到丢的包到达之后才能顺序后续执行。

MOBA 本身的单位比较多,同屏时客户端最多有将近 100 个单位,假如一个 AOE 技能打到 20 个单位,然后种了一个 debuff,Client-Server 状态模式需要发这些信息下去,可能潜在的同步状态信息是比较多的。

另外一个 Client-Server 模式本身开发的方式,客户端表现与服务器的判定,要完美的匹配是比较困难的。

我们之前做端游 MOBA 的时候,一个英雄技能我们开发要两三周的时间。《王者荣耀》当时开发周期是三、四个月,这样的时间压力下,我们用 Client-Server 的方式搞不定,时间不够。

当时团队心里会比较紧张,因为那时候市面上并没有看到用这种方式做强 PvP、高及时性手游的。

帧同步网络抗抖动能力比较弱,因为不能丢包。帧同步的基本原理,大家有兴趣可以下来自己了解一下。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读