再度更新,不過首先聲明,這不是本人寫的,而且也不是書。我只是在韓國網站上有看到,覺得還不錯就拿出來跟大家分享啦~~ 那今天就首先附帶作者簡介吧~~(作者簡介也是網站上面有的內容)
作者簡介:裵鉉稷,韓國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)發送信息或直接在留言板上留言。但包括游戲服務器程序員,參與游戲開發的任何人都不是運營者,開發者和運營者之間有明顯的業務區分,運營者只是在程序員和玩家之間發揮中介作用。
他們對于游戲的檢測和升級等事項沒有任何權力,而且程序員也不能插手運營者的業務。就算是你向服務器程序員請求充值自己的賬號,他們也無法滿足你的要求。