这个曾经在端游时代主导搭建 RTS 游戏《霸三国》框架的技术团队,在转型做 MOBA 手游《王者荣耀》后为游戏提供了巨大的支持,但这个过程也并非一帆风顺。
在今年刚结束的腾讯 TGDC 上,《王者荣耀》技术总监孙勋在技术专场中,对这款游戏进行了一次技术复盘,从技术层面上为听众嘉宾讲解了游戏在引擎、整体网络架构与网络同步方案上的尝试与转变。
孙勋称,目前游戏的服务器架构主要由“游戏大厅”和“PvP”2 个部分组成,而在不断探索中,后来又在架构中加入了 Proxy 中转服务器,也正是这个服务器的加入为《王者荣耀》解决了后来“安卓、iOS”同服等一系列出现的问题。
此外,他还介绍了《王者荣耀》在网络协议以及同步方案上的一些尝试,并一一复盘了这些尝试的优劣势。
为大家解答了为什么,最终游戏会放弃 TCP 协议(传输控制协议)与曾经在《霸三国》中所使用的 Client-Server 结构(C/S结构),并且转而使用了 UDP 协议(用户数据报协议)与帧同步方案。
本文是腾讯王者荣耀项目技术总监孙勋带来的《王者荣耀技术架构》主题演讲内容整理。将分几部分为大家介绍王者后台开发过程中的一些内容和思考:包括《王者荣耀》整个背景介绍、后端架构、上线后的调整,以及网络同步方案和反zuobi方案等。
现在《王者荣耀》后端机器大概有 4600 多台,我们的容量也有一定的扩展,进程数目是 4 万多个。
《王者荣耀》游戏背景
2012 年,我们当时做的端游《霸三国OL》,就是王者的前身。这款产品最开始是偏向 RTS 的游戏,后来我们把它改成了端游 MOBA,再后来做成了手游 MOBA,即现在的《王者荣耀》。
从 2012 年开始做 RTS 游戏到 2013 年,从多控制单位的 RTS 游戏,变成 MOBA 游戏,到 2014 年启动手游 MOBA 的预研,再到 2015 年 2 月份我们把大量人力(大概 100 多号人)投入做《英雄战迹》(《王者荣耀》前身)开发,时间并不长。
《霸三国》的玩法是玩家可以在战前通过排兵布阵构成自己局内的策略,通过控制多个单位,技能释放、兵种特性的释放形成对抗。
我们最开始做《霸三国》的时候客户端引擎是 unreal,但在做《王者荣耀》的时候改用了unity 引擎,3 到 4 个月的研发时间内,产品本身从代码层面没有任何东西是从《霸三国》那里搬过来用的,全部代码都需要重写。
《霸三国OL》的一些启示
做端游《霸三国OL》的这段经历,给我们做王者带来很多相应的启示,比如策划、程序及整个团队对 MOBA 的理解。
另外当时在做端游《霸三国》的时候,我们采用了 Client-Server 的模式,但其实在过程中有借鉴类似帧同步的概念:例如在断线重回对视野的处理这块。
传统的做法是,重回时会发当前的镜像和后续的其他下行通知信息。
这种做法会有一个问题,如果新增其他的场景内模块的时候,根据场景内包含的当前的各种物件、所在状态的各种各样信息,都需要把这些东西打包发下去,在后续开发、维护的时候会显得很麻烦。
我们的做法是,把服务器下发的所有序列包做缓存,并按顺序重发,让客户端做出快进的表现,它的概念和帧同步比较类似。
还有一点,就是预留设计弹性,在最开始的 RTS 中,每个玩家最多可以操作 5-8