服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - 服务器知识 - 告诉你游戏服务器到底是什么(二)

告诉你游戏服务器到底是什么(二)

2020-04-13 20:42danikim1234 服务器知识

游戏服务器的目的和作用与游戏客户端完全相反。游戏客户端展示华丽的画面和庞大的容量,并且为了给用户提供极大化水准的画面使用全部的硬盘性能,因此就算是再好的电脑也只能发出很大的噪音。

再度更新,不过首先声明,这不是本人写的,而且也不是书。我只是在韩国网站上有看到,觉得还不错就拿出来跟大家分享啦~~ 那今天就首先附带作者简介吧~~(作者简介也是网站上面有的内容)

作者简介:裵铉稷,韩国Nettention公司首席执行官,毕业于韩国延世大学计算机工程与科学专业,自1995年开始在职于游戏公司,开发项目主要有《兔子和乌龟3D》、《Menticide拳击游戏》、《奥兹世界》、《Blitz1941》、Game Programming Gemstone5,7、ProudNet等。其所开发的游戏服务器引擎ProudNet是韩国唯一一个自主研发的游戏服务器引擎,并且已在很多游戏项目中运用。使用ProudNet的主要游戏有:《洛奇英雄传》、《魔界村Online》、《颓废之心》、《Moon Wolf》、《S4超特攻联盟》、《仙境传说2》等。

第二部:游戏服务器的运行原理,为什么会发生死机和卡壳现象?

游戏服务器是怎样运行的?

游戏服务器的目的和作用与游戏客户端完全相反。

游戏客户端展示华丽的画面和庞大的容量,并且为了给用户提供极大化水准的画面使用全部的硬盘性能,因此就算是再好的电脑也只能发出很大的噪音。

游戏客户端要尽可能呈现华丽的画面,但游戏服务器所能够呈现的也就只有‘死机’或‘卡壳’。也就是说,做得越精准的服务器就越不能体现其存在感,达到极限的服务器可能就是无人能够知晓其存在的服务器吧?

就像在第一部所说,游戏服务器发挥大脑作用,因此与客户端不同,游戏服务器的运行会非常乏味。用过Free服务器的读者可能都会知道(尽量不要使用Free服务器,因为它非常危险),其所呈现的画面是极其乏味的。

告诉你游戏服务器到底是什么(二)

【转自百度图片】

而实际的游戏服务器也一样,呈现画面同样乏味甚至有时会没有呈现的画面。

稳定的服务器会以‘Daemon’状态运行,在这种状态下即使没有登录电脑也会照常运行服务器。但乍一看,游戏服务器有时候更像是一个‘傻瓜电脑’。

虽然游戏服务器本身无法呈现任何画面,但游戏开发商会自主研发可以观察游戏服务器运行状态的程序。我们称此为游戏服务器管理程序。游戏服务器管理程序可以对游戏服务器电脑进行远程控制,并查看和控制游戏运行状态。与游戏服务器相同,游戏服务器管理程序也是一级保安系统。

游戏服务器的运行环境与一般的电脑完全不同。在定温、定湿的封闭空间中特制的又薄又宽的电脑机器一层一层叠放,后面还有一团团复杂的网线。为了最大限度减少卡壳现象,游戏服务器会安装于被称为最小网络核心的非常昂贵的网络环境当中。

因此投入到维护游戏服务器时所需的电脑、软件、网络租赁、空间租赁等方面的资金会异常庞大。听说魔兽世界为维护游戏服务器一天要花上80万人民币左右。

告诉你游戏服务器到底是什么(二)

游戏服务器硬盘也是游戏公司的一级保安系统,比如要将游戏服务器转移至其他地方时,只会有极少数人员知道转移计划,而且听说为防止中途发生事故,有些公司还会用武装警备进行护送。

游戏服务器的运行体制并不是我们常用的Windows系统,而是会在被称为Windows Server或Linux的特殊服务器运行体制当中运行服务器。

Linux是免费的,因此对服务器的维护费用会比Windows服务器便宜,而且Linux公开了所有的Source Code,所以可以按照自己的需求提高其性能。在运行体制功能中可以将不必要的功能轻松进行卸载也是Linux的优点之一,而Linux能够成为‘制作高性能服务器时的最好选择’的原因也在于此。

告诉你游戏服务器到底是什么(二)

【Linux的运行画面。计算机科学专业生可能会对此画面比较熟悉】

但Linux比一般的Windows的用法复杂,而且也极其乏味。对于已经适应了Windows环境的程序员来说Linux的第一印象只能会让人感到窒息。因为所有工作都要在没有图像,只有文本的环境中用键盘(而不是用鼠标)进行。

告诉你游戏服务器到底是什么(二)

【最具代表性Windows程序开发工具Visual Studio】

在笔者刚开始开发游戏的时候(1997年)Linux还没有那么出名,而与Linux有类似运行体制的Solaris是游戏服务器的佼佼者。当时Windows服务器能否发挥良好的游戏服务器作用在游戏开发者之间也是个未知数。

但是在已经熟悉了Windows程序开发的笔者看来‘并不熟悉且价格也较为昂贵的运行体制和开发工具’完全是一种浪费。为长期进行游戏客户端与游戏服务器之间的有机运行,双方都使用同样的程序开发工具可能会更好一些。

此后发生了一件决定性事件——在Linux和Solaris环境中期待许久的星际争霸没能正常运转!此后除了笔者,其他游戏开发公司的程序员也开始顽强(!)地研究在Windows服务器当中开发游戏的方法。其结果便是,开辟出了可以在Windows服务器中开发高性能游戏服务器的渠道,并且其境界也已达到了如今的状态。

告诉你游戏服务器到底是什么(二)

【如果星际争霸可以在Linux或Solaris环境中运行,那么现在Linux应该会压倒性成为游戏服务器的佼佼者。】

在前面也有提到过游戏服务器的作用应是‘处理游戏Logic’,而且游戏服务器也在多个玩家中发挥仲裁作用。

比如有玩家1和玩家2,两位玩家在进行对决(PVP)。在玩家1攻击玩家2时,这不会在客户端进行裁决,客户端只会发送‘请求攻击’的信号。

服务器在接收到‘玩家1请求攻击玩家2’后对此进行处理。即玩家1可能会被攻击,玩家2会减HP,这些过程都是由服务器来进行。之后游戏服务器会通知玩家1‘你被攻击了’,通知玩家2‘你减了HP’。

告诉你游戏服务器到底是什么(二)

与Package游戏不同,在线游戏当中游戏服务器除了处理游戏Logic外还发挥其他作用。比如对多人游戏结果进行裁决的仲裁作用,为识别是谁在进行游戏的认证(登录)处理作用,储存用户获得的Item后在下次用户登录时再次呈现其Item的作用,为显示排名整理用户情报的作用, 为追查是谁拿走了被抢的Item进行累积记录的作用等等。而且还要查找到试图进行盗窃的不良用户,并赶出这些用户。

过去是由一台游戏服务器处理这些事情,但这种方法在同时在线人数较多时会经常发生卡壳和死机现象。我们通常所说的‘死机’是指游戏服务器发生错误而停止运行的现象,而‘卡壳’是指服务器超载,运行极其缓慢时发生的现象。发生死机或卡壳的原因之一便是同时在线人数多的时候。

为解决这种现象从而能够处理更多的同时在线人数,我们会将游戏服务器分散到多台机器当中。如今的在线游戏中分布游戏服务器功能可以说是必选项。

分布游戏服务器功能根据游戏种类的不同会有多种不同形式,但其基础架构都是类似的。MMORPG游戏服务器一般会使用如下分布。

告诉你游戏服务器到底是什么(二)

对游戏服务器进行上述分布的话开发游戏服务器会变得更加复杂,但因为它却能够处理更多的同时在线人数并急剧减少卡壳和死机现象,所以会节省很大的服务器维护费用。因为比起维护多个中低性能服务器,维护较少的高性能服务器会节省更多费用。

告诉你游戏服务器到底是什么(二)

【游戏服务器的分布例】

对服务器进行分布式设计还可以减少因死机带来的损失。如果一台服务器负责所有功能,在因一个较小的错误服务器停止运转,则正在进行游戏的所有玩家就都要被赶出游戏。但如果进行分布式设计,那么只有部分服务器功能会停止运转。虽然在进行游戏时也会有些不便但总比赶出游戏强好多倍。

比如信息服务器停止运转时,游戏只是无法使用信息服务器,但游戏本身还是照常运行的。如果NPC服务器停止运转,则在整个游戏World中看不到一个怪物(但玩家对玩家的战斗是可以照常进行的)。分布游戏服务器可以减少所涉及的损失。

不会经常发生死机现象的游戏服务器也是因这种分布式的服务器结构。

是谁制作游戏服务器?

如上述介绍,游戏服务器负责管理游戏玩家的情报,安全等。同时在线人数较多时,游戏服务器还要迅速处理大量演算,因此游戏服务器大部分是由具有专业技能的程序员开发制作。

告诉你游戏服务器到底是什么(二)

【游戏服务器程序员招聘信息,与对游戏客户端的任职要求有些不同】

但即使是游戏服务器的开发者也不可以不知道游戏程序,因为游戏服务器也要处理游戏Logic,因此需要熟练操作游戏程序。对于多人游戏或对安全度较为敏感的部分,游戏服务器程序员需要主导整个开发工作。即服务器开发者需要熟知游戏企划。

在客户端程序员集中于呈现游戏画面等游戏企划时,游戏服务器程序员需要与企划者商讨(其实是一场战争)游戏规则,信息交流,均衡等问题。

客户端程序员为制作法师的技能,需要与画面设计员一同研究其技能的呈现方法和呈现过程。这时服务器程序员则需要与企划者一同对法师的技能在向其他玩家产生影响后恢复其体力的过程进行研究。也就是说,我们可以看到的部分是由客户端程序员进行,而我们无法看到的部分则由服务器程序员进行。

但客户端和服务器也不是一定会是由不同的人分担,有些公司会让程序员同时负责游戏服务器和游戏客户端的制作,只是给多人进行业务分散。即,制作技能的程序员负责制作与技能相关的服务器和客户端,制作其他系统的程序员则负责制作相应系统的客户端和服务器。这样一来在发生问题时可以立刻了解是因服务器还是因客户端的问题。但即使分担业务但也会另有负责服务器核心技术的开发者,客户端也是如此。

游戏服务器不可能呈现华丽的画面,但因其发挥大脑作用,所以在制作服务器时不可以发生一丝误差。因此服务器程序员的工作环境往往就是一堆一堆的字符窜,而且还要处理在游戏服务器运行时记录内部发生的Log(游戏服务器运行时留下的记录,每小时将近有数千条)。

告诉你游戏服务器到底是什么(二)

游戏客户端非常注重展现并处理华丽画面的技术,因此他们不仅要处理复杂的数学演算,也要动员各种演算知识,游戏程序员的座位上摆放厚厚的‘数学’书也不是只用来摆设的。要动员最高的电脑硬盘性能会要求像GPU程序等高难度的技术。并且游戏客户端的程序复杂度和开发量也是非常地多。

但服务器则更加注重稳定性,虽然很少出现复杂的数学公式或演算,但在制作分布式服务器时程序自然而然会变得非常复杂。需要经常处理‘同步化’,并且为了使多个程序同时在服务器中运行时不让情报顺序产生错乱等等问题也是服务器程序员所要负责的项目。如果一旦发生差错就会引发服务器不稳定或卡壳现象,严重时也会因这种漏洞给黑客提供方便的盗窃渠道。服务器程序员之所以对游戏服务器进行再三检讨也是出于这种原因。

很多玩家在进行游戏时如有不便事项会向游戏运营者(GM)发送信息或直接在留言板上留言。但包括游戏服务器程序员,参与游戏开发的任何人都不是运营者,开发者和运营者之间有明显的业务区分,运营者只是在程序员和玩家之间发挥中介作用。

他们对于游戏的检测和升级等事项没有任何权力,而且程序员也不能插手运营者的业务。就算是你向服务器程序员请求充值自己的账号,他们也无法满足你的要求。

延伸 · 阅读

精彩推荐