游戏服务器到底是什么?
来源:互联网 发布:qb刷取软件 编辑:程序博客网 时间:2024/06/05 02:57
在线游戏当中,如果有‘在线’则一定会跟随‘游戏服务器’。但关于游戏服务器却并没有什么较好的评价,在致歉文中最常见的单词也是‘服务器’。游戏进行不畅时也会经常说是‘服务器不稳定’,如果存在卡壳现象首先责怪的也必定会是服务器。那现在就开始了解一下这个话题多毛病也多的,但又具有重量及存在感的服务器吧!什么是游戏服务器?
我们可以大致将服务器分类为‘主机(Host)游戏服务器’和‘专用(Dedicated)游戏服务器’。
主机游戏服务器是指,在购买一个游戏后直接运行游戏中的游戏服务器并与他人一起进行游戏的程序。在Package游戏当中可以看见这种游戏服务器。
而在专用服务器,游戏玩家无法直接在自己的电脑上运行服务器,而是由游戏制作商运行游戏服务器。专用服务器可以承载比主机服务器更多的同时在线人数,少至数十名多至数百万名可以同时进行游戏。游戏制作商保留专用服务器,因此无论是在技术上还是在法律上,游戏玩家直接运行游戏服务器是不可能的。
主机游戏服务器只在Package游戏当中,而专用游戏服务器是在在线游戏当中。笔者在此会将专用游戏服务器统称为游戏服务器。
在Package游戏当中运行的游戏程序主要有输入,处理游戏Logic,呈现三种作用。输入是指用户利用鼠标或键盘将命令输入到电脑上的行为。处理游戏Logic是指模拟电脑当中发生的游戏空间环境的行为。呈现是指将游戏空间及游戏World呈现到画面和音响上的行为。
如在RPG游戏当中为移动我的魔法师角色在画面中点击鼠标右键的行为称为输入,此时移动魔法师角色被称为处理游戏Logic,展现魔法师优美背影则被称为呈现。
即只要有一台电脑便可以进行游戏是Package游戏的特点。
但如果要进行在线游戏则需要首先下载并安装‘游戏客户端’,但只有客户端也不能直接进行游戏,电脑首先要联网,之后还要连接到游戏服务器。
‘在线游戏’不会只有一人进行游戏,它需要与连接到网络的其他玩家一同冒险一同竞争,所以我们称其为多人游戏。但如果要与他人进行游戏则在中间需要有一个管理游戏进程的程序,这便是‘游戏服务器’。
如果在Package游戏当中是由一台电脑处理输入,处理游戏Logic,呈现功能,那么在在线游戏当中其功能被分割为服务器和客户端。游戏客户端负责输入和呈现,游戏服务器负责处理游戏Logic的一部分功能。这也是没有连接游戏服务器便无法进行游戏的原因。
即,在线游戏当中游戏服务器所发挥的作用就如同我们的大脑,虽在表面上看不出来,但如果没有服务器就等于是死。
在线游戏与Package游戏不同,几乎没有非法复制的可能性,其原因之一便是如果没有游戏服务器游戏将无法运行。反之,如果游戏服务器一旦被公开,那在线游戏也会与Package游戏一样,非法复制会变得非常简单。游戏开发商之所以将游戏服务器视为1级保安部分也在于此。
Package游戏即便死机也只有玩家一人会感到激愤,但如果游戏服务器一旦出现死机现象则会有全世界数千数万的玩家同时感到激愤。因此在游戏服务器中最重要的第一是稳定,第二也是稳定,第三还是稳定。
游戏服务器是怎样运行的?
电脑可以自行解决一些问题,它可以说是一个非常方便的机器,但在里面运行的却是由人们精心制作开发的。如果想要让电脑变得更加“聪明”那么在里面运行的也就需要人们更加精心的制作。再怎么说是高端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
- 游戏服务器到底是什么?
- 告诉你游戏服务器到底是什么
- 告诉你游戏服务器到底是什么(连载)
- 告诉你游戏服务器到底是什么(连载)
- 传奇到底是什么游戏,最后权威答案
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- 游戏服务器:到底使用UDP还是TCP
- C# GridView自定义表头
- javascript 原生实现 jquery live/delegate
- 使用Ajax向服务器端发送请求
- POJ 1260 Pearls(DP)
- AlarmManager机制和系统唤醒锁的总结
- 游戏服务器到底是什么?
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境
- android开发工具类,不怕用不到,就怕用时找不到
- POJ 2013
- redis 数据类型(四)sets的使用
- 12-24小时制(15)
- Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)
- SAS软件的使用和统计学分析的初步介绍
- [linux]centos6.5下mysql、tomcat环境搭建