神技微享会| 唐健:腾讯大作《逆战》背后的海量之道

发表于2016-05-17
评论1 3.4k浏览
  唐健:  腾讯天美J3工作室技术总监  《逆战》后台技术总监

 
  4月28日晚,由Gad-腾讯游戏开发者平台推出的《神技微享会》栏目首次跟大家见面,本次微沙龙邀请到了端游《逆战》后台技术总监唐健到场。《逆战》这款游戏自上线以来,一直受到了众多玩家的热捧,收入也一路高涨,并多次获得公司级大奖,到底《逆战》后台架构有哪些巧妙设计能承受海量用户的冲击呢?

  以下为《神技微享会》部分沙龙笔记分享,由Gad-腾讯游戏开发者平台整理发布。

  问:FPS类游戏对输入反馈和坐标同步要求很高(输入了立刻有反应,射击精度要求高),逆战的同步模型和网络模型是怎样的?     
  答: 从目前接触过那么多游戏来看,特别是在线游戏,应该说是FPS游戏是在线游戏里服务器中最复杂的一种。为什么这么说呢?因为FPS游戏服务器有一个3D运算的一个过程,其他游戏服务器绝大多数是2D的。也就是说服务器会做比较复杂的3D运算,同时还会做一些物理计算的工作。

问:《逆战》的同步机制是怎样的?
  答:客户端和服务器同时做一个物理事件的模拟。我们来简单描述一下整个移动的过程:客户端移动一下,就会向服务器发起一个移动的包。传送到服务器以后,服务器其实也在做一个移动,并会判断客户端是否合法。如果数值超过范围,就强制跟服务器保持一致。

问:为什么要选择UDP?
  答:选择UDP有这么几个原因的考虑:第一个UDP链接速度其实比TCP快,TCP有一个三次握手,以及内部有一套非常复杂的重传机制,所以说他在某些时候会比UDP慢。第二原因,因为是一款即时游戏,FPS游戏节奏比较快。同时也能看到,对包的可靠性要求没有那么高,比如说客户端走到某一个地方,某一帧丢了,其实对后面的服务器影响其实并不大。也就是说容忍一部分丢包情况出现。但是,如果UDP拿来做传输文件, 就不太合适了。

问:游戏中是不是所有包都不可靠的吗?
  答:不是的,有些包我们一定要收到。比如,用户被敌方消灭或游戏中玩家重生了。这些消息是可靠消息,可靠消息就说一定要送达。

问:客户端和服务器这种移动同步的频率大概是多少?
  答:目前来说的话,特别是人与人对战这种情况下(PVP),要求客户端和服务器通信频率是三十帧。

  问:《逆战》的战斗逻辑是怎么处理的?
  答:都是在服务器上处理的。包括他的每走一步的校验,技能的伤害,命中范围的计算,都是在服务器上面完成的。完全不会信任客户端的计算结果。

   问:《逆战》如何解决外挂的问题?
   答:几乎每一个客户端的动作,都会在服务器上去做校验。遇到不合法操作的情况下,都能在服务器上面去做检测,通过检测可以马上做出相关处理和及时的封杀掉。如遇到比较厉害的外挂(逻辑上合法),只能通过客户端反外挂的一些措施去解决。

问:全区全服的架构是如何构思的?     


《逆战》架构图
  答:全区全服就是没有物理分区的概念。目前《逆战》单区的承载容量:电信区200万左右,网通区100万左右。所有的用户都要在大的集群里去做服务,我们是采用单进程模式去做的。我们也会根据不同的需求进行进程服务。

问:服务器需要物理引擎验证子弹弹道之类的吗,NPC的寻路和射击AI是放在服务器吗?
  答:当然需要物理引擎来验证,NPC的寻路和射击AI都是放在服务器上面做的。

问:CF手游是用U3D做的吗?那服务器用的是什么物理引擎?
  答:是的,客户端使用U3D做的。服务器采用物理引擎是NVIDIA PhysX。

问:怎么做到动态开服?
  答:《逆战》是全区全服,没有动态开服这种概念,但是,存在动态增加服务器这种说法。

问:程序功能完成后具体还需要做哪些事情,估计要占用多少时间比例?
  答:确实,完成程序功能就只是总工作量的百分之20时间。剩下很多的时间,比如:上线工作与运维协调的功能,还有运行的情况。其中包括日志、 CPU、内存、网络数据流量等等。

问:手游CF的同步频率是大概每秒多少次?
  答:会比较低,手机上的操作情况没有PC上操作那么精确,大概在20几帧左右。

问:CF手游逻辑也与《逆战》一样,都在服务器端完成?客户端也是没有U3D的物理引擎,用的是与服务器一样的物理引擎么?
  答:CF手游逻辑服务器是我们自己写的。U3D客户端也使用的是 PhysX。

问:CF服务器也需要读取地图3D数据吗?
  答:当然啦,因为服务器需要做物理碰撞。没有3D地图数据,就不能做物理碰撞。 

丨《神技微享会》是Gad-腾讯游戏开发者平台打造的集研发、运营、发行为一体的游戏行业线上微沙龙。
丨沙龙每月不定期召开1~2期,欢迎大家关注及“Gad-腾讯游戏开发者平台”微信公众号,参与报名。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引