游戏服务器的定义     

  在线游戏当中,如果有‘在线’则一定会跟随‘游戏服务器’。但关于游戏服务器却并没有什么较好的评价,在致歉文中最常见的单词也是‘服务器’。游戏进行不畅时也会经常说是‘服务器不稳定’,如果存在卡壳现象首先责怪的也必定会是服务器。那现在就开始了解一下这个话题多毛病也多的,但又具有重量及存在感的服务器吧!什么是游戏服务器?

  我们可以大致将服务器分类为‘主机(Host)游戏服务器’和‘专用(Dedicated)游戏服务器’。

  主机游戏服务器是指,在购买一个游戏后直接运行游戏中的游戏服务器并与他人一起进行游戏的程序。在Package游戏当中可以看见这种游戏服务器。

  而在专用服务器,游戏玩家无法直接在自己的电脑上运行服务器,而是由游戏制作商运行游戏服务器。专用服务器可以承载比主机服务器更多的同时在线人数,少至数十名多至数百万名可以同时进行游戏。游戏制作商保留专用服务器,因此无论是在技术上还是在法律上,游戏玩家直接运行游戏服务器是不可能的。

  主机游戏服务器只在Package游戏当中,而专用游戏服务器是在在线游戏当中。笔者在此会将专用游戏服务器统称为游戏服务器。

在Package游戏当中运行的游戏程序主要有输入,处理游戏Logic,呈现三种作用。输入是指用户利用鼠标或键盘将命令输入到电脑上的行为。处理游戏Logic是指模拟电脑当中发生的游戏空间环境的行为。呈现是指将游戏空间及游戏World呈现到画面和音响上的行为。

  如在RPG游戏当中为移动我的魔法师角色在画面中点击鼠标右键的行为称为输入,此时移动魔法师角色被称为处理游戏Logic,展现魔法师优美背影则被称为呈现。

  即只要有一台电脑便可以进行游戏是Package游戏的特点。

  但如果要进行在线游戏则需要首先下载并安装‘游戏客户端’,但只有客户端也不能直接进行游戏,电脑首先要联网,之后还要连接到游戏服务器。

  ‘在线游戏’不会只有一人进行游戏,它需要与连接到网络的其他玩家一同冒险一同竞争,所以我们称其为多人游戏。但如果要与他人进行游戏则在中间需要有一个管理游戏进程的程序,这便是‘游戏服务器’。

  如果在Package游戏当中是由一台电脑处理输入,处理游戏Logic,呈现功能,那么在在线游戏当中其功能被分割为服务器和客户端。游戏客户端负责输入和呈现,游戏服务器负责处理游戏Logic的一部分功能。这也是没有连接游戏服务器便无法进行游戏的原因。

  即,在线游戏当中游戏服务器所发挥的作用就如同我们的大脑,虽在表面上看不出来,但如果没有服务器就等于是死。

  在线游戏与Package游戏不同,几乎没有非法复制的可能性,其原因之一便是如果没有游戏服务器游戏将无法运行。反之,如果游戏服务器一旦被公开,那在线游戏也会与Package游戏一样,非法复制会变得非常简单。游戏开发商之所以将游戏服务器视为1级保安部分也在于此。

  Package游戏即便死机也只有玩家一人会感到激愤,但如果游戏服务器一旦出现死机现象则会有全世界数千数万的玩家同时感到激愤。因此在游戏服务器中最重要的第一是稳定,第二也是稳定,第三还是稳定。

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

  游戏服务器的目的和作用与游戏客户端完全相反。
  游戏客户端展示华丽的画面和庞大的容量,并且为了给用户提供极大化水准的画面使用全部的硬盘性能,因此就算是再好的电脑也只能发出很大的噪音。
  游戏客户端要尽可能呈现华丽的画面,但游戏服务器所能够呈现的也就只有‘死机’或‘卡壳’。也就是说,做得越精准的服务器就越不能体现其存在感,达到极限的服务器可能就是无人能够知晓其存在的服务器吧?
  就像在第一部所说,游戏服务器发挥大脑作用,因此与客户端不同,游戏服务器的运行会非常乏味。用过Free服务器的读者可能都会知道(尽量不要使用Free服务器,因为它非常危险),其所呈现的画面是极其乏味的。
  而实际的游戏服务器也一样,呈现画面同样乏味甚至有时会没有呈现的画面。
  稳定的服务器会以‘Daemon’状态运行,在这种状态下即使没有登录电脑也会照常运行服务器。但乍一看,游戏服务器有时候更像是一个‘傻瓜电脑’。
  虽然游戏服务器本身无法呈现任何画面,但游戏开发商会自主研发可以观察游戏服务器运行状态的程序。我们称此为游戏服务器管理程序。游戏服务器管理程序可以对游戏服务器电脑进行远程控制,并查看和控制游戏运行状态。与游戏服务器相同,游戏服务器管理程序也是一级保安系统。
  游戏服务器的运行环境与一般的电脑完全不同。在定温、定湿的封闭空间中特制的又薄又宽的电脑机器一层一层叠放,后面还有一团团复杂的网线。为了最大限度减少卡壳现象,游戏服务器会安装于被称为最小网络核心的非常昂贵的网络环境当中。
  因此投入到维护游戏服务器时所需的电脑、软件、网络租赁、空间租赁等方面的资金会异常庞大。听说魔兽世界为维护游戏服务器一天要花上80万人民币左右。
  游戏服务器硬盘也是游戏公司的一级保安系统,比如要将游戏服务器转移至其他地方时,只会有极少数人员知道转移计划,而且听说为防止中途发生事故,有些公司还会用武装警备进行护送。
  游戏服务器的运行体制并不是我们常用的Windows系统,而是会在被称为Windows Server或Linux的特殊服务器运行体制当中运行服务器。
  Linux是免费的,因此对服务器的维护费用会比Windows服务器便宜,而且Linux公开了所有的Source Code,所以可以按照自己的需求提高其性能。在运行体制功能中可以将不必要的功能轻松进行卸载也是Linux的优点之一,而Linux能够成为‘制作高性能服务器时的最好选择’的原因也在于此。
  但Linux比一般的Windows的用法复杂,而且也极其乏味。对于已经适应了Windows环境的程序员来说Linux的第一印象只能会让人感到窒息。因为所有工作都要在没有图像,只有文本的环境中用键盘(而不是用鼠标)进行。
  在笔者刚开始开发游戏的时候(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)发送信息或直接在留言板上留言。但包括游戏服务器程序员,参与游戏开发的任何人都不是运营者,开发者和运营者之间有明显的业务区分,运营者只是在程序员和玩家之间发挥中介作用。
  他们对于游戏的检测和升级等事项没有任何权力,而且程序员也不能插手运营者的业务。就算是你向服务器程序员请求充值自己的账号,他们也无法满足你的要求。

电脑可以自行解决一些问题,它可以说是一个非常方便的机器,但在里面运行的却是由人们精心制作开发的。如果想要让电脑变得更加“聪明”那么在里面运行的也就需要人们更加精心的制作。再怎么说是高端IT,最后还是人的作用最重要。而对于游戏开发也是如此。

  在本篇中就集中探讨在开发游戏时制作游戏服务器的程序员吧!

游戏开发程序的开始

  游戏策划员负责制作任务,怪物,玩家,道具等游戏信息策划,此外对游戏系统即登录过程,结成同盟的方法,结成联手对决的方法,信息交换的方法等策划也需要由游戏策划者制作。最初不到10来页的策划书到最后会增加至数百页以上。

  不管是游戏服务器还是游戏客户端,程序员首先要做的便是熟知游戏企划案。精读企划书后设想所要制作的游戏画面和动作方案等。在向游戏企划者介绍自己要制作的游戏后逐步完善制作方法和程序结构,而且有时也需要查找企划案中不足的部分,与企划者一同完善游戏企划。

  在游戏开发初步阶段,游戏客户端程序员的工作量会非常地多,而且还要动员所有的数学知识和熟练的程序设计能力。如今竞争异常激烈的游戏行业,客户端程序员所要学习的数学技术可以说是无边无际,他们会与变得日趋复杂的游戏打交道,为开发大量的程序,加班也是日常便饭。

  游戏开发初期,服务器程序员的开发量和复杂程度比客户端程序员要少得多,他们首先要熟知游戏企划,为容纳更多的同时在线人数开始缜密地设计游戏服务器。

  在开发程序时通过测试的检验是必选项,绝对!不可以在假定情况下进行开发是程序员的一个规则。

  游戏客户端有许多可以进行测试的环境,他们可以利用多种多样的硬盘进行测试。但游戏服务器却不同,因为只有在真正连接到多个同时在线人数时才能算是真正的测试。所以他们需要制作出能够稳定运行的游戏服务器,而且在游戏服务器当中一个小小的错误也可以诱发致命性的障碍。游戏服务器数量越多能够找出失误的概率也就越小。

  因此他们只能用尽自己的浑身解数,为尽可能呈现连接大量的同时在线人数时的状况,服务器程序员会事先制作一个DummyClient并进行测试。在DummyClient中他们将呈现自己所能想象得到的所有的状况。

  DummyClient是一种自动化程序。(AutoProgram)

  “如果是Auto的话……是Hacking Tools?”

  是的,服务器程序员亲自制作被称为Hacking Tools的Bot程序。Dummy Client连接到游戏服务器后自动选择或生成角色,之后在游戏世界中进行决斗或射杀怪物,它们会不断重复这种过程并记录服务器状态和测试Log,同时告知程序员。

  DummyClient只会按照开发路程运行,即它们不会脱离开发者的意图,因此它们也无法对没有预想到的状况进行测试。

  使用数千数万个Dummy Client进行测试,但它们也只是按照设计者的意图运行,无法自己制作出程序员所无法预知的情况。因此在此时所有的开发程序员会对游戏进行各种自己能够想象得到的测试(在数千个Dummy Client运行的状况下),此外游戏运营商或代理测试公司职员也会对游戏进行各种测试。

  这时游戏服务器程序员开始收集问题情报,不断解决所发生的问题,而游戏企划者则在这时会不断找出游戏中趣味不足的部分进行修改,画面程序员不断制作出各种画面,客户端程序员收集在哪个地区游戏运行不畅的情报对此进行修改。他们会不断收集将可能发生的情况,程序员也继续向Dummy Client增加各种稀奇状况。

  不幸的是很多程序员有本能地避开Bug的习惯,这也是在制作Dummy Client时的界限。如果由真正的玩家进行测试将能够收集到更多的Bug解决更多的问题,但即使动员全公司职员人数也不过几百人。

  那应该怎样解决这个问题呢?方法只有一个,就是公开召集玩家用这些玩家做‘试验’。

  这种公开试验便是‘封测’。

从封测到正式运营

  如果要进行封测就要先召集试验休(?),游戏开发公司会在自己的官网上公开招募,封测会以首次,第二次,第三,第四,第五……等形式反复进行。首次封测其实就是拿玩家进行临床实验。

  最终确定第一次封测日期后游戏开发部会开始变得非常忙碌,游戏服务器程序员会对程序的每一个角落进行缜密的测试,并反复检查源代码以便完成最后步骤。

  那么现在让我们通过‘假想的服务器程序员故事’了解一下之后将发生的情况吧。

假想的服务器程序员故事

  我叫‘吴燮多’,在服务器开发部工作。

  今天是个非常特别的日子。制作两年之久的游戏今天终于要进行首次封测,为了今天我们连着加班了2个月以上,现在已经结束了所有的测试。

  在进行测试的时候也加入了很多新企划,但这些新企划因为没有进行过充分的测试,性能可能会有些不稳定,法师的广域破坏技能是昨天刚刚加进去的,这部分更让我担心。但即使这样,也不能延迟日程,因为营业部已经发布了封测公告,而且在各种网站上进行了宣传广告。因长期的加班生活,我们的体力也已达到了极限,无论如何想做出决断便是我们现在的心情。

  进行封测的时间是下午2点,简单吃完午饭后我们再次对服务器状态进行了多番检查。用只允许公司内部连接的方式进行过测试,也确认了测试毫无异常,现在是万事俱备,只欠东风了。

  1点59分,我们开始进行倒计时。10,9,8,7,…… 人们在后面跟着数字一起喊“五!四!三!二!一!”

  点击了服务器程序运行按钮。

  原先为0的服务器管理程序同时在线人数开始急剧增加,聚集在显示器前的人们开始变得更加紧张。

  “哇~ 运行不错嘛!”

  但是数值突然降到了0.0……0……0……

  凝视显示器的公司老板和PD脸色开始变得苍白,之后所有人埋怨的眼神都聚集到了我们身上。负责服务器的同事以飞快的速度(我从未看到过的)查寻服务器程序Log,而另一个同事敲击键盘的手正在发抖。其他同事都各自回到自己的位置上亲自连接到游戏,我也在服务器中开启了远程监控查看每个服务器的运行状态。

  营业部那边开始传来各种嘀咕声,说现在公告栏上有好多抗议,大部分都是一些表示不耐烦的句子,更有一些玩家直接开始脱口大骂,但营业部同事需要逐一向他们道歉。听说有一些玩家也详细地向他们解说了自己的角色现在在游戏当中是如何如何的。

  营业部整合了这些内容后转达给了我们,我们开始分析Log,情报,累积在服务器中的错误记录等。在玩家发出的情报中,我们大致猜出了决定性原因。另人无奈的是,原来这是因为服务器程序中加入了一个错误符号。我们向PD做了报告,并告知他们会尽快解决问题。

  随后PD大喊:“营业部!发布致歉文后通告玩家在30分钟后可以再次进行游戏!服务器部门!在15分钟之内完成补丁!”

  还好我们事先已经制作了自动Build系统和服务器自动补丁系统,要不然如果要在15分钟之内完成数十台服务器的补丁是绝对不可能的。在结束30分钟的检查后再次开启了服务器。同时在线人数再次以刚才的速度继续增加。

  “啊!拜托,这次一定要成功!”

  在同时在线人数不断增加时突然数值没有了变化,过了一段时间数值还是没有变化。人们开始嘀咕,“怎么回事?有点不正常吧?”服务器程序员们飞快地回到自己的位置上。服务器照常运行,但好像是在哪里被堵住了。我们觉察到这就是所谓的Dead  Lock现象(服务器虽然照常运行,但因内部Logic处于僵持状态服务器停止进程的状态),我们开始立即确认服务器显示器,终于找出了服务器处理量为0%的点。

  “其实是服务器死机,我们会尽快修改。”

  “需要多长时间?”

  “这个我们也不敢确定,先要找到原因才行。”

  营业部发布了30分钟的检验公告。我们服务器开发部以平时无法看到的犀利的眼神(还有苍白的面孔)不断重复开启,关闭多个黑色窗口。已经过了30分钟,但我们依然不知道原因是什么。

  “大概还需要1个多小时。”

  检验时间延长了1个小时,但没过一会儿有个服务器程序员突然大喊:“找到了!我现在就改!”

  程序部部长喊到:“用内部测试系统再检查一下修改后的服务器是否运转正常!”

  …

天啊!进行测试后不久公司测试系统服务器立即发生死机,服务器程序员猜测可能是修改后的部分产生了副作用。如果现在不进行整修服务器就会冻结,但进行整修服务器又会死机,而且更严重的是我们现在根本就不知道原因到底是什么。现在已经不可能再延长测试时间了,我们只好先开启了服务器,虽然不过一会儿服务器还是会死机但实在是没有其他办法。我们服务器部门开始疯狂查找Bug原因,但这如同“大海寻针”。

  在服务器不断重复运行、死机时,过了4个小时后我们才找到了原因。发布了30分钟的检测公告后关闭了服务器。之后开始进行服务器整修,结束整修后我们以飞快的速度开启了服务器。两腋已被汗湿透。

  谢天谢地,等待我们的用户立即开始连接游戏,而且也大大超出了刚才的同时在线人数。现在看起来稳定了很多,服务器管理程序所显示的服务器状态图也非常流畅,许多用户开始积极评价我们的游戏。我们终于可以松一口气便决定一起出去抽根烟。

  但在刚要夹一口烟的时候,一位同时飞快地向我们跑来。

  “在1级中卡壳现象非常严重!“

  我们立即熄灭手中的烟头立刻回到自己的位置。看到正在进行测试的同事电脑画面,角色在不知方向来回不停地移动,这是服务器超负荷时会出现的现象。

  PD过来问我们有没有什么解决方案,我们提议先扩充服务器Channel个数。营业部决定在15分钟后发布服务器检测公告,在30分钟的检测时间内扩充服务器数量。没过几分钟我们便得到发行商的通知,说已经准备完毕,现在就可以使用服务器了。我们赞叹发行商能够预先料到会发生这种状况提前充分预备好装置的预测能力。

  15分钟后,看到公告栏发布的检测通知,聊天窗口开始出现玩家不耐烦的声音,但我们现在却没有能够理会这些声音的余地。现在我们的大脑根本就没有时间去想其他事情。

  没过一会儿我们关闭了服务器。在快要完成新服务器的变更设置时,一位同事大喊:“在服务器内部找到了发生死机的Bug!拥有持续治愈Buffer的角色使用广域破坏技能时会经常发生死机,我们需要进行补丁!”

  天啊!我们的检测需要在10分钟后结束,现在要补丁?

  “需要遵守约定时间,先开启服务器吧!”我们听从了PD的决定,再次开启了服务器。玩家开始陆续登录,看到在那么短的时间内扩充服务器有些玩家表示赞叹,但大部分的玩家的忍耐程度已经接近极限。

  在修改关于广域破坏技能的Bug时我们祈祷没有人使用这个技能,但现实却完全打破了我们的期待。果然!有些玩家使用了这个技能,我们首先决定直接开启服务器,因为这不是会经常出现的现象。

  “什么时候能修好?”PD的声音感到非常疲倦。

  这次应该需要很长时间,再怎么检查源代码我们也无法知道到底是哪里出现了错误,由其像广域破坏技能在服务器内的处理方式尤为复杂,而且也容易发生服务器超载现象。我们开始后悔没有经过充分的测试就直接添加了这个技能。

  我们没有办法回答PD,这时我想起了某人说过的话。这时应该先拿掉这个技能再开启服务器。

  *要先解决服务器死机问题。

  就算是再好的技能、再是游戏的核心功能,如果无法在5分钟内解决并开启服务器(这种情况几乎不可能)那就要先排除这个技能。比如在MMORPG游戏中有一些比较特殊的刀法,但如果此技能存在严重的Bug现象就要先去除这个功能,即使在下一次升级之前只能用魔法师进行战斗。

  在服务器重复发生死机时我们服务器开发部开始阻止新添加的技能。客户端部门开始制作阻止使用此技能的补丁程序。为了应用阻止新添加技能的补丁程序,营业部发布了30分钟的检测公告。聊天窗口也当然可想而知……

  ……

  开始封测已经过了3天时间,我们开发部开始一个个变得像僵尸一样。接连几天我们都没能回家,一天只能睡几个小时,而且还要疯狂地进行检测和补丁。真不知道在首次封测中接连24小时开启服务器是从谁想出来的。

  “今天光检测就超过10次了”

  “拿这种垃圾服务器还进行什么封测!”

  “程序员都在家玩儿呢吗?”

  我们还真想回家玩儿呢!现在运营部也都没有了招架之力,听说因为接连几天没能回家一些女职员还发生了生理不调现象。

  ……

  终于结束了长达15天之久的首次封测,我们进行了简单的啤酒Party然后都各自回了家。公司给我们开发部批了2天的休息时间,但在家中我们也无法完全放心。我打开电脑开始查看玩家公告栏,抗议、不耐烦、激励等各种语言掺杂在里面。

  过了两天后回到公司,运营部将Bug情报整理后传达给了我们。在500多个情报中300多个需要在二次封测中全部解决。

  开发商打来电话,说要在3个月后进行二次封测,还说这次将召集更多的玩家,日程已经决定无法延长。

  企划部说在进行二次封测之前需要添加其他重要内容。通过这次封测他们了解到游戏平衡问题非常严重,因此要大幅修改系统企划案。

  到下次封测为止估计每天都要加班了,但还好这不是公测,因为如果在公测中发生这种问题那时就真没有什么答案了。

商品化和Live团队

  在进行多次封测时服务器和客户端开始逐渐变得稳定。进行完足够的封测后会开始准备公测。公测会投入相当大的资金进行广告,因此如今的公测已经接近于游戏的正式上市,而这期间的服务器不稳定便是恶梦中的恶梦。

  结束最后的封测后开始进行公测之前的开发期内将进入侧重于稳定化,Bug补丁,性能调试,均衡问题等‘最终阶段’。在此期间不会进行如添加新企划等大幅变更,因为可能会存在像首次封测时发生的不稳定现象。但即使这样,在进行公测时也会存在一些服务器不稳定等情况,因为公测时的连接用户会比封测多很多。

  与封测不同,开始进行公测后如果有丝毫差错可能会导致更大的事故。在开始进行公测后服务器程序员夜以继日的工作量可以说是无法避免的。在所有人员用尽自己的浑身解数让游戏具有足够的稳定性后,运营方便可告知游戏的正式上市。(部分收费游戏有时会不进行大幅宣传)游戏正式上市后开发团队则转换成Live团队,他们将在已上市的游戏项目中逐渐添加更多的内容,这如同在Package游戏中开发扩张Pack。

  已上市的游戏为能够一直获得玩家喜爱,需要不断添加新的游戏功能。Live团队需要在大年或圣诞节等节日中除了进行微小的游戏升级外有时还需进行添加全新World或新功能等大规模的升级。

  在金融业中的数据处理系统仍在使用叫COBOL的具有50年悠久历史的程序语言。如银行等一个微小的Bug也会引起严重事故的领域,对原有数据处理系统进行变更则需要慎重加慎重。

  游戏服务器与客户端也是如此。对已经上市的游戏程序进行变更需要再三考虑。在游戏上市前已经进行过无数次的测试,但上市后游戏也有可能添加新的系统或内容。但新添加的内容却无法进行测试,因此也有可能会发生服务障碍。

  不幸的是,已经上市的游戏如果一旦发生服务障碍其所造成的影响远比我们的想象要严重得多。在测试阶段因只是测试,玩家也无法再多说什么,但已经上市并且有些玩家已经支付游戏费用后,如果服务器一旦发生障碍玩家将无法容忍这种现象。

  因此为最大减小这种风险,即使是已经上市的游戏在进行升级时也会进行封测,而运行测试服务器的原因也正在于此。

  对于一个游戏服务器程序员来讲对游戏系统进行变更的升级是一件负担重大的任务。

  有时可能需要对用户账户情报结构(所持有角色及物品等)进行变更,对此需尤为谨慎。一旦发生错误游戏不仅会发生不均衡问题而且严重时还可能消除所有用户情报。

  在对用户账户情报进行变更时需要重新设置STAT,这虽是一种捷径但如果无法避免对结构和账户情报的损坏时则会以全体补丁为代价进行破坏。

  【▲有时魔兽世界的角色技能在每次补丁时需要重新设置,这是因为添加了调整用户账户情报的补丁。】

  已经制作完成的游戏服务器程序难以进行整修,如果不断陆续添加一些内容服务器结构则会变得越来越复杂。虽然有时会想将这些数据全部进行重整但服务器程序员会大大反对,因为其风险实在是太大。

  在已上市的在线游戏中,升级时添加的内容虽然较多,但原有系统不会发生太大改变,其原因也正在于此。

原文链接:http://www.lanlong.net/article-164-1.html
相关链接:http://blog.csdn.net/u011300706/article/details/9612871

收藏分享

游戏服务器到底是什么?相关推荐

  1. 告诉你游戏服务器到底是什么

    第一部:游戏服务器的定义  在线游戏当中,如果有'在线'则一定会跟随'游戏服务器'.但关于游戏服务器却并没有什么较好的评价,在致歉文中最常见的单词也是'服务器'.游戏进行不畅时也会经常说是'服务器不稳 ...

  2. 告诉你游戏服务器到底是什么(连载)

    作者简介:裵铉稷,韩国Nettention公司首席执行官,毕业于韩国延世大学计算机工程与科学专业,自1995年开始在职于游戏公司,开发项目主要有<兔子和乌龟3D>.<Menticid ...

  3. 一文告诉你游戏服务器的架构到底是什么样,各服务器的职责是什么

    目录 1.服务器架构演变的最主要的原因是 2.典型的服务器架构介绍 3.流行的服务器介绍 4.关于服务器架构分布式的看法 5.总结 今天写一下游戏服务器的架构,主要还是还是分析下服务器架构的原理,以及 ...

  4. php 多人游戏_「谁会是下一个王者农药」云服务器如何搭建游戏服务器?

    手游越来越火了,听听业内人士的分析,他山之石,多多借鉴,那么手游的服务器到底如何搭建的? 从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务 ...

  5. 游戏服务器的架构演进

    本文阅读预计需要10分钟,主要技术点来如下,感兴趣请继续: 游戏服务器特征 短连接游戏服务器架构 长链接游戏服务器架构 分区分服服务器架构 MMOARPG服务器架构 房间服务器架构 一.游戏服务器特征 ...

  6. 如何设计大型游戏服务器架构?

    一.游戏服务器特征 游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求.所以这类服务的特点是要特别关注稳定性和性能.这类程序如果需要多个协作来提高承载能力,则还要关注部署和 ...

  7. 刀片服务器改台式电脑_服务器到底是个什么东东?跟电脑有啥区别?电脑知识学习!...

    一位朋友留言点的内容,想了解服务器方面的知识,对于普通用户而言,确实对服务器感觉很神秘,不知道服务器到底是个什么东东,我保证看完这篇,你就会明白服务器到底是个啥了. 首先可以很明确的告诉你,服务器也是 ...

  8. 当我设计游戏服务器时,我在想些什么?(1)

    机缘巧合的机会,我有幸能够从头开始设计一个游戏的服务器.中间遇到很多欢声笑语和悲伤泪水,这里分享一下. 我之前所在项目组的游戏服务器架构如下图: 这款游戏是一款MMO的端游,GateWay网关的任务是 ...

  9. 关于百万用户服务器架构能力(一)QQ游戏服务器架构

    QQ游戏于前几日终于突破了百万人同时在线的关口,向着更为远大的目标迈进,这让其它众多传统的棋牌休闲游戏平台黯然失色,相比之下,联众似乎已经根本不是QQ的对手,因为QQ除了这100万的游戏在线人数外,它 ...

最新文章

  1. 学好C++,一个项目就够
  2. 【赠书】阿里巴巴官方出品,工业级知识图谱最新书籍领取!
  3. android-6.0不支持FloatMath.sqrt(x * x + y * y)
  4. 你可能不知道的switch
  5. Python环境 及安装
  6. 两种常见挂载Jenkins slave节点的方法
  7. easyui打开新的选项卡_Jquery Easyui选项卡组件Tab使用详解(10)
  8. 修改字段名和字段备注
  9. 用Spring Cloud Alibaba开发微服务为什么越来越香?
  10. Java线程池关闭1-shutdown和isTerminated
  11. 2021-06-19表单,内嵌框架
  12. html表单作业练习
  13. sokit socket调试工具
  14. 实验2 网络扫描--Nmap与X-Scan
  15. 第三方定量定性检测质谱实验
  16. 转载:js技巧收集(200多个)
  17. latex 分布符号_LaTeX最全的数学符号大全(更新中…… )
  18. 微信小程序如何实现登录注册带源码
  19. h5 修改title 微信_iH5中级教程:微信必备,为H5设定标题
  20. 如何在 Lightroom 中使用去朦胧功能?

热门文章

  1. WPViewPDF Delphi 和 .NET 的 PDF 查看组件
  2. 什么是网站权重以及提升权重的方法
  3. Android -- RecyclerView实现顶部吸附效果
  4. EXCEL+方方格子中的翻译工具+百度翻译=实现批量翻译
  5. 等一台聪明的炒菜机器人 炒热风口上的智能家居
  6. CheckM-Options-zn
  7. HAZOP到LOPA和SIL验算软件-歌略RiskCloud
  8. android ae动画教程,【博文精选】使用After Effects输出代码原生动画
  9. 【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】
  10. 基于Vue移动音乐webapp跨域获取QQ音乐歌单接口