mmorpg arpg fps等游戏服务端如何设计?
作者:卡卷网发布时间:2024-12-10 14:53浏览数量:91次评论数量:0次
第三代游戏服务器
- 第三代的游戏服务器的普及是从2007年开始的,也可以说是从《魔兽世界》开始,那时无缝的游戏世界地图已经深入人心了,在之前的游戏里玩家走几步就要切换场景,每次切换场景都要加载几十秒,这是非常破坏游戏体验的,所以从2005年以后的大型的MMO开始,无缝地图就成为了标配
- 以前玩的《暗黑破坏神》是在你进入到某一层时加载一个地图,到了第三代游戏服务器后就不是这样了,第三代游戏服务器的架构如上方图片所示,也是有两个网关服务器,玩家是连接网关服务器的,不是直接连接后端服务器
- 由于第三代服务器没有地图的存在,不能像第二代服务器一样有游戏世界A或者游戏世界B,所以出现了节点服务器,一个节点服务器可以认为是游戏里的一块区域,如果游戏里的无缝地图分成10块或者是20块,那么就会有20或者10个节点服务器,在节点服务器中要进行寻路时只要访问地图服务器就可以了,游戏服务器只是提供了地图寻路的服务
- 无缝地图服务器中最关键的点就是地图的节点管理,一个节点就是一块区域,当玩家从节点A移动到节点B时发生了什么样的事情呢?
- 玩家在上图中使用绿色的三角形表示,
- 当玩家从节点A走到节点B需要做如下处理
- 玩家1是完全由节点A控制的,玩家3是由节点B控制的,处于两个节点边缘的玩家2同时由节点A和节点B来进行管理,因为玩家在地图边界时可能会来回走动,直接将他交给节点A或节点B进行管理都不太合适,所以就交给节点A和节点B共同管理
- 这块被节点A与节点B共同管理的区域叫做共管区,玩家2从节点A移到节点B的过程中,会同时向节点A和节点B发送请求来获取节点A和节点B的情况,玩家2到达节点A的地图边界时就会开始请求节点B的一些数据了,防止在跨域节点时出现卡顿
- 直到玩家2彻底离开节点A与节点B的共管区,玩家2才会彻底离开节点A,来到节点B,这个过程中一般会使用链表或者动态数组来进行管理
- 把游戏世界的地图分割为一个个的区块交由不同节点来管理,但这些节点在地理上是没有必要互相链接的,比如在平坦的大陆周围有一些高山,高山附近的玩家比较少,那么就可以把这些高山区块统一交给一个节点来管理,节点只是逻辑上的概念,所以这个管理所有的高山区的节点没有必要跟平坦大陆的节点连在一起
- 节点所管理的区块可以在游戏运行时根据游戏的负载实时调整,负责进行调整就是节点管理服务器(NodeMaster),它是非常重要的一个服务器
- 节点管理服务器负责管理节点的负载均衡,在开发节点服务器时,我们碰到的第一个问题就是节点服务器需要和玩家进行通信
- 以前使用按照场景切割服务器的方式问题不大,只需要访问一下网关服务器就可以把数据缓存起来,但现在服务器种类增加了,玩家又不停的在节点之间来回移动,如果按照用户编号来进行查询就比较麻烦
- 另外一方面,网关服务器要根据坐标来计算玩家在哪个节点上,玩家来回移动也会导致逻辑越来越麻烦
- 为了解决这个问题,第三代服务器特地增加了一个对象服务器,原来的方式是网关服务器根据一定的算法计算玩家应该在哪个节点上,由于玩家可能会从节点A跑到节点B去,所以就需要在节点B上面重新加载玩家放在节点A上面的数据,再把它挪到节点B上面
- 并且如果一个玩家与另外一个节点的玩家进行交互,那么中间的过程就会非常复杂
- 首先必须要通过网关查找来与节点B的玩家进行交互,节点B的数据又要通过网关再转发给节点A,过程非常繁琐
- 所以第三代服务器特地增加了一个对象管理服务器,对象管理服务器专门管理一个节点上的所有对象,一个对象可以是在节点A,也可以在节点B,还可以在节点C,这样就变成了节点只管理一个区块,对象的数据放在对象服务器,区块的数据放在节点服务器
- 上图是第三代服务器的第二种形态,网关服务器经过精简后就没有那么多复杂的功能了,只是负责数据转发,用户逻辑放在对象服务器里进行管理,服务器经过网关找对象时通过一个很简单的算法就能知道对象应该在哪个对象服务器上,因为所有的对象都是被一个对象管理器管理的
动态负载均衡
- 第三代的服务器上有的节点被玩家访问的次数比较多,比如如果一个游戏服务器里的交易NPC全部都集中在一块区域里,玩家会经常访问这块区域,那么这块区域的负载就会比较大
- 要解决这个问题可以将人群比较拥挤的区块分割的小一点,让一个节点管理一个小区块,这个区块里面要管理的NPC和玩家比较多,同样的也可以将平时没有什么玩家走动的打怪地图划分的大一些,这就叫做动态负载均衡
- 动态负载均衡是由节点管理服务器负责管理的
战网游戏服务器
- 战网服务器也可以叫做第三代第三型服务器,传统的服务器都是基于最早的MudOS架构不断进行延伸,这种架构对于一些实时性的战斗交互处理效率太低了,所以它需要一种战网服务器
- 战网服务器的特点就是处理效率比较高,很多计算都是放在客户端进行,服务器只负责数据转发,《王者荣耀》就可以认为是服务器转发的战网服务器,但它不是一个纯粹的战网服务器,它是类似于服务器转发的战网服务器,经典的战网服务器跟MMORPG游戏服务器有两个区别
- MMORPG游戏服务器是分区分服的,北京区的用户和广州区的用户老死不相往来
- 战网服务器每局游戏一般都是开房间,八个人或者十个人一起参加游戏,全国用户都可以访问同一个服务器,所有玩家都可以一起进行游戏,玩家与玩家之间使用的是P2P方式进行连接的
- 以前的战网服务器只负责把玩家连接在一起,然后从所有玩家中选出一名玩家作为主机,现在为了游戏的公平性,服务器都已经不采用这种架构了,而是让所有数据都经过服务器进行转发,这样就保证了客户端玩家不太可能作弊,这种架构比这种传统的战网服务器要安全一些,同时又不像MMORPG游戏那样所有东西都在服务器上计算
- 战网服务器都包括哪些东西呢?
- MatchMaking
- MatchMaking服务器是用来专门做玩家的匹配服务的,它是通过创建房间、加入房间、自动匹配、玩家邀请等等方式来组成游戏房间的
- STUN(牵引服务器)
- 牵引服务器的目的就是把其他玩家连接到战网服务器当前的主机上面,在某些情况下,比如电信和网通的用户连接比较慢时,战网服务器就会设置一个转发服务器,来转发无法联通的玩家之间的操作
- 其实王者荣耀也是采用这样的方式,所有的数据都要经过服务器转发一遍
第三代服务器已经是比较完善的一套架构了,但是依然有许多问题存在,想学习更多游戏服务器相关内容,可以看一下我们的视频《Unity全栈开发大师》
END
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
相关推荐
最新文章
随机文章
广告位

你 发表评论:
欢迎