什么是DS(Dedicated Server)

本片博客参考:UE5 Dedicated Server专用服务器与网络同步

因为我之前是参与Web后端开发的,所以对游戏的服务器的理解还停留在上学时,也就是客户端不参与实际的运算,所有的运算与数据的下发都由服务器去控制,然后前后端分离

首先我们需要明确一个认知—UE5的客户端代码和服务器代码是一体的,即两端的代码实际上是混杂在一起的。我们经常听到一种说法叫“前后端分离”,就是服务器干服务器的,客户端干客户端的,二者各为两个工程互不干扰,互相之间通过TCP或者UDP进行通信。而UE5的模式则是客户端和服务器不分离,同在一个工程之中,互相之间的代码使用宏来区分。两种方式各有各的好处。

什么叫客户端和服务器不分离,共用一套代码呢?这就不得不牵扯到游戏同步模式了。

? *以下均摘自参考博文*

? 游戏网络同步的方式一般分为两种方式,P2PC/S

? P2P即每一台客户端之间互相直连,这种方式的同步极为复杂,对联机游戏来说基本已经淘汰了;C/S即经典的客户端/服务器模式。

? C/S又可细分为两种,一种是由一个客户端做主机,其他的客户端连接这个主机来进行网络同步,主机即拥有服务器功能也拥有客户端功能,这种模式多用于局域网联机,这种模式中每一个客户端都可以成为主机;一种是单独剥离服务器的功能,服务端只处理服务器相关的业务,所有的客户端都通过连接服务器来进行网络同步,同时客户端只留下客户端相关的业务,这就是网游中最常用的模式了。

ok,在了解完游戏同步模式之后。我们现在就来解释共用一套代码是什么意思:

? 当单机游玩的时候,游戏是不连服务器的,此时客户端需要自己能处理一系列的游戏逻辑,所以这部分代码需要写在客户端中。

? 然后当你需要进行联机游戏的时候,游戏逻辑的判断需要在服务器上进行判断,并由服务器给其他客户端进行同步,但是你已经把这段代码写到客户端的部分里了,然后又不想又写一份一样的,所以UE采用了服务器与客户端共用一套代码这样的形式,并且会在代码片段前添加上宏来标识是服务器还是客户端的,并且会提供编译客户端还是服务器的选项。

DS就是在一体的代码中剔除了不需要的部分(UI与渲染等)而引出来的服务器,让我们回到标题

? 我们这里要学习的ds服务器就是从这个一体的工程中单独剥离出来的一个服务器,为什么要剥离呢?如果不剥离,网络同步就变成了C/S模式的第一种情况了,但是大多数情况下服务器是不需要场景渲染,人物控制这些客户端业务的,剥离出来可以减轻服务器的运行压力。

? Dedicated Server服务器简称ds服务器,是UE5用于解决FPS同步问题的一种专用服务器,UE5在UDP上自己做了一层根据游戏特点专门优化的网络协议(epic不愧是fps起家的),专门用于ds通信,ds服务器的一大特点就是客户端和服务器共享一份代码,因为高性能的同步需要各种客户端预测和回溯的方法,可以很好的解决同步延迟问题。但是UE5ds服务器承载量不高,不适合用于需要连接大量客户端的场景。

平台注册入口