摘要: 隨著網(wǎng)絡(luò)游戲玩家的日益增多,網(wǎng)絡(luò)游戲服務(wù)器端承受著嚴(yán)峻的性能考驗(yàn)和負(fù)載壓力。為了提供良好的服務(wù)品質(zhì),網(wǎng)絡(luò)游戲服務(wù)器端的設(shè)計(jì)顯得尤其重要。進(jìn)行游戲服務(wù)器端網(wǎng)絡(luò)通信架構(gòu)及關(guān)鍵技術(shù)分析,對于游戲產(chǎn)業(yè)的發(fā)展有重要的現(xiàn)實(shí)意義。
關(guān)鍵詞: 網(wǎng)絡(luò)游戲;服務(wù)器端;通信架構(gòu)
1網(wǎng)絡(luò)游戲服務(wù)器概述
1.1 網(wǎng)絡(luò)游戲服務(wù)器的基本需求
網(wǎng)絡(luò)游戲是一種比較典型的分布式實(shí)時(shí)互動(dòng)的網(wǎng)絡(luò)應(yīng)用。在過去幾年里面,有三種都屬于實(shí)時(shí)交互的網(wǎng)絡(luò)應(yīng)用,它們之間截然不同,但互聯(lián)網(wǎng)上的地位卻非常突出:(1)軍事模擬類應(yīng)用;(2)網(wǎng)絡(luò)虛擬環(huán)境;(3)大規(guī)模多人在線游戲(MMOG)。調(diào)查分析表明,現(xiàn)今的娛樂業(yè)在 MMOG 上,包括手機(jī)游戲和在線游戲上,都進(jìn)行了大量的投資。
從其聯(lián)網(wǎng)技術(shù)來看,MMOG和其他類的多媒體應(yīng)用不同,有非常不同的特征。在MMOG當(dāng)中,用戶需要與很多事物進(jìn)行交互,因此就需要在網(wǎng)絡(luò)上傳遞產(chǎn)生相當(dāng)數(shù)量的控制信息。玩家在MMOG游戲中娛樂的過程中必須保證流暢的游戲畫面和動(dòng)作,這也就要求游戲的事件數(shù)據(jù)必須能夠在指定的間隔時(shí)間范圍內(nèi)到達(dá)。
1.2網(wǎng)絡(luò)游戲服務(wù)器的設(shè)計(jì)要求
快速響應(yīng)用戶。整個(gè)系統(tǒng)應(yīng)該設(shè)法隱藏固有網(wǎng)絡(luò)延時(shí),快速響應(yīng)用戶,保證用戶操作流暢。
提高通信效率。系統(tǒng)應(yīng)當(dāng)設(shè)計(jì)適當(dāng)?shù)耐ㄐ艆f(xié)議,以降低網(wǎng)絡(luò)通信量,使帶寬不至于成為某些客戶端的性能瓶頸。
設(shè)計(jì)高效的并發(fā)系統(tǒng)。在C/S模型中,服務(wù)器節(jié)點(diǎn)維護(hù)整個(gè)世界狀態(tài),處理所有客戶端請求,成為系統(tǒng)的關(guān)節(jié)點(diǎn)。因此,客觀上要求服務(wù)器具有高并發(fā)性,應(yīng)當(dāng)可以同時(shí)接受大量用戶連接,同時(shí)能夠有效隔離錯(cuò)誤,為所有用戶提供穩(wěn)定的后臺(tái)支持。
服務(wù)的分布。單臺(tái)服務(wù)器處理能力有限,可以承受的用戶量有極限。隨著客戶端的大量增加,服務(wù)器節(jié)點(diǎn)將需要巨大的計(jì)算能力和存儲(chǔ)能力,因此需要把服務(wù)分布在一個(gè)基于某種策略的服務(wù)器集群上。
2網(wǎng)絡(luò)游戲服務(wù)器系統(tǒng)層次框架
網(wǎng)絡(luò)游戲服務(wù)器體系從功能上可以劃分成幾個(gè)較為獨(dú)立的子系統(tǒng)模塊,通信部分位于體系的最底層,它向上層提供具體的業(yè)務(wù)數(shù)據(jù)傳輸,連接服務(wù)器與客戶端的交互。一個(gè)良好的設(shè)計(jì)應(yīng)該盡量減少模塊間的耦合度,結(jié)合系統(tǒng)特性運(yùn)用設(shè)計(jì)模式力求封裝變化,以使整體架構(gòu)具有較好的可擴(kuò)展性和可維護(hù)性。
網(wǎng)絡(luò)游戲通常設(shè)計(jì)為C/S結(jié)構(gòu),客戶端只對非敏感數(shù)據(jù)進(jìn)行簡單的邏輯處理,從游戲虛擬世界的角度來看,客戶端只是一個(gè)觀察世界的窗口,玩家通過觀察并與世界實(shí)體比如 NPC(Non-player character)、其他玩家進(jìn)行交互。服務(wù)器從玩家那里接收到操作信息,進(jìn)行處理后發(fā)回客戶端,經(jīng)客戶端通過圖形化處理,給玩家呈現(xiàn)出一個(gè)繽紛的游戲世界。
就服務(wù)器端而言,位于最底層的是網(wǎng)絡(luò)層(Network Layer),用于在因特網(wǎng)上傳遞客戶和服務(wù)進(jìn)程之間的消息數(shù)據(jù)包。游戲邏輯層(Logic Layer)則對接收到的數(shù)據(jù)進(jìn)行處理,同時(shí)負(fù)責(zé)保持客戶與服務(wù)器游戲狀態(tài)空間的一致性。表現(xiàn)層(ExpressLayer)對這個(gè)狀態(tài)空間的場景對象進(jìn)行物理表示(Physical Expression),便于服務(wù)器端的管理人員監(jiān)視和實(shí)時(shí)分析等,考慮服務(wù)器負(fù)擔(dān)和主要職責(zé)問題,一般表現(xiàn)層做得非常簡單,均可以根據(jù)配置信息決定是否加載該層的相關(guān)模塊。
而客戶端中,網(wǎng)絡(luò)層負(fù)責(zé)與服務(wù)器進(jìn)行通信,與服務(wù)器網(wǎng)絡(luò)層比較,其通信要求相對很低;游戲邏輯層則負(fù)責(zé)處理客戶端的行為邏輯以及非玩家角色的 AI 控制等;表示層的實(shí)現(xiàn)相對于服務(wù)器來說要復(fù)雜得多,采用專業(yè)的 2D 或者 3D 引擎技術(shù)展現(xiàn)絢爛的圖形畫面,伴以音頻等,以給玩家?guī)磔^好的游戲體驗(yàn)。由于玩家需要與游戲虛擬世界進(jìn)行交互,因而在表示層之上增加交互層以處理玩家的輸入控制等。
(1)網(wǎng)絡(luò)層(Network Layer)
網(wǎng)絡(luò)層負(fù)責(zé)游戲網(wǎng)絡(luò)消息的發(fā)送和接收,消息的加解密以及底層的網(wǎng)絡(luò)通信,包括 NetworkIO、Decrypt/Encrypt 和 Messenger。接收客戶請求的數(shù)據(jù)并進(jìn)行解密處理,傳遞給上層協(xié)議解釋后轉(zhuǎn)換成業(yè)務(wù)消息發(fā)送給邏輯層,將經(jīng)邏輯層處理業(yè)務(wù)后的產(chǎn)生的響應(yīng)回包加密,然后發(fā)送給客戶。
邏輯層(Logic Layer)。邏輯層中 Governor 為中央控制模塊,對各個(gè)子模塊進(jìn)行管理控制,負(fù)責(zé)服務(wù)器端不同模塊的消息傳送,控制游戲的主時(shí)鐘,由 Governor 控制的子模塊包括:Authentication,World, Rule controller, AI controller, Command Script 和 Configuration等。其中,Authentication 主要負(fù)責(zé)用戶身份的驗(yàn)證,User Database 存儲(chǔ)用戶的基本資料,包括用戶 ID、密碼、用戶姓名和游戲中角色的數(shù)據(jù)等;World, Rule controller和 AI controller 共同維護(hù)游戲狀態(tài)空間,檢測玩家請求的有效性并模擬非玩家角色 NPC 的行為;Command Script 和 Configuration 則提供服務(wù)器參數(shù)的配置并根據(jù)需要通過命令改變服務(wù)器中的一些行為規(guī)則等。
表示層(Express Layer)。表示層根據(jù)配置信息決定是否加載,其中 World Simulate 用于模擬游戲狀態(tài)空間,觀察玩家行為;Stat.Analyse則是抓取整個(gè)系統(tǒng)的快照,查看當(dāng)前運(yùn)行情況,分析服務(wù)質(zhì)量等。三個(gè)層次負(fù)責(zé)各自的功能,共同協(xié)作向客戶提供服務(wù)。
3通信系統(tǒng)功能需求
網(wǎng)絡(luò)游戲作為一種分布式系統(tǒng),絕大部分都采用 C/S 模式,通常具有幾千至幾十萬人同時(shí)在線的承載能力。游戲平臺(tái)為了保證游戲的性能,需要滿足以下的要求:
響應(yīng)時(shí)間及時(shí)性。從用戶的忍受程度以及游戲運(yùn)行的流暢性角度考慮,服務(wù)器對用戶要求的響應(yīng)時(shí)間以及服務(wù)器對數(shù)據(jù)庫的操作時(shí)間都應(yīng)該限定在一個(gè)范圍之內(nèi)。不同的游戲其客戶端響應(yīng)時(shí)間要求不同,這也跟客戶與服務(wù)端請求響應(yīng)的處理機(jī)制相關(guān)。一般響應(yīng)時(shí)間不應(yīng)超過200ms。
可伸縮性。可伸縮性在本文中指游戲世界中可同時(shí)在線的玩家數(shù)量。大規(guī)模網(wǎng)絡(luò)游戲和WEB 站點(diǎn)相似,使用情況可能是不可預(yù)料的、是動(dòng)態(tài)增加的,如果系統(tǒng)不是可伸縮的將會(huì)崩潰。實(shí)踐證明,對于 3000 人以內(nèi)的游戲世界狀態(tài)維護(hù),采用單機(jī)系統(tǒng)達(dá)到很好的效果,而在線的玩家數(shù)量達(dá)到萬人以上時(shí),當(dāng)前解決可伸縮性的主要方法是設(shè)置多服務(wù)器或者服務(wù)器集群。
穩(wěn)定性、可靠性。網(wǎng)絡(luò)游戲運(yùn)營是一種7×24小時(shí)不間斷的業(yè)務(wù),由于網(wǎng)絡(luò)游戲應(yīng)用具有不平穩(wěn)、變化幅度大的特點(diǎn),例如在節(jié)假日網(wǎng)絡(luò)游戲訪問量就會(huì)快速增長,過后又會(huì)突然回落,因此服務(wù)器必須要能夠很好地解決這種突發(fā)性的不平穩(wěn)和間歇。如果由于服務(wù)器失敗而使游戲會(huì)話終止,那么就會(huì)影響玩家對服務(wù)器的信任度,因此可靠性對于網(wǎng)絡(luò)游戲的服務(wù)器來說很重要。
可擴(kuò)展性和可維護(hù)性。采用可擴(kuò)充的框架結(jié)構(gòu)和統(tǒng)一的游戲開發(fā)接口,分離游戲平臺(tái)與游戲邏輯,使得開發(fā)者只須專注游戲邏輯的開發(fā),減少了公共功能(通訊、計(jì)費(fèi)、社區(qū)、游戲大廳等)的重復(fù)開發(fā)。這樣有利于系統(tǒng)的業(yè)務(wù)功能升級(jí),以及增加平臺(tái)中運(yùn)行游戲的數(shù)量,還可以輕松實(shí)現(xiàn)對所有系統(tǒng)資源的管理和維護(hù)。
4通信體系結(jié)構(gòu)設(shè)計(jì)
4.1功能劃分
網(wǎng)絡(luò) I/O。網(wǎng)絡(luò) I/O 負(fù)責(zé)完成端口的創(chuàng)建、關(guān)聯(lián)和銷毀操作,以及 I/O 工作線程的啟動(dòng)等。
Socket 監(jiān)聽。Socket 監(jiān)聽負(fù)責(zé)服務(wù)器端監(jiān)聽 Socket 的創(chuàng)建過程,根據(jù)預(yù)定義規(guī)則接受或者拒絕客戶的連接請求。
會(huì)話管理。游戲會(huì)話記錄了游戲客戶實(shí)體的所有信息,包括網(wǎng)絡(luò)連接信息、角色活動(dòng)狀態(tài)等,會(huì)話管理負(fù)責(zé)游戲會(huì)話的創(chuàng)建、更新以及銷毀,以及空閑會(huì)話的檢查。
協(xié)議轉(zhuǎn)換。這里的協(xié)議指的是協(xié)議數(shù)據(jù),游戲中客戶端與服務(wù)器雙方通信的應(yīng)用層業(yè)務(wù)數(shù)據(jù),作為游戲邏輯的中介,也稱為游戲數(shù)據(jù)包。協(xié)議轉(zhuǎn)換提供統(tǒng)一的協(xié)議解釋機(jī)制以及協(xié)議數(shù)據(jù)包的分拆與重組操作,以實(shí)現(xiàn)具體業(yè)務(wù)到協(xié)議數(shù)據(jù)包的相互轉(zhuǎn)換,同時(shí)對數(shù)據(jù)包進(jìn)行加解密操作。
線程池。線程池用在游戲邏輯處理部分,主要負(fù)責(zé)管理線程的生成,結(jié)束和分配任務(wù)等工作,線程池相當(dāng)于一個(gè)容器,在容器中運(yùn)行很多個(gè)線程,系統(tǒng)只需將工作交給線程池,由線程池負(fù)責(zé)協(xié)調(diào)和分配內(nèi)部工作。線程池對外界屏蔽了內(nèi)部線程的調(diào)度運(yùn)行,其對外界相當(dāng)于一個(gè)整體部分。
輔助結(jié)構(gòu)。輔助結(jié)構(gòu)包括體系中用來緩沖的各種隊(duì)列,如接收隊(duì)列、發(fā)送隊(duì)列、請求隊(duì)列以及響應(yīng)隊(duì)列,通過隊(duì)列緩沖同步操作與異步操作之間的數(shù)據(jù)傳遞。另一個(gè)輔助結(jié)構(gòu)則是內(nèi)存池,預(yù)先分配內(nèi)存以供通信系統(tǒng)使用,在一定程度上改善系統(tǒng)效率和降低系統(tǒng)資源的開銷。
參考文獻(xiàn)
[1]信息產(chǎn)業(yè)部軟件與集成電路促進(jìn)中心. 網(wǎng)絡(luò)游戲服務(wù)器端編程.北京:電子工業(yè)出版社
[2]ames Kurose, Keith Ross.計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法. 北京: 機(jī)械工業(yè)出版社,2005
[3]Thor Alexander.大型多人在線游戲開發(fā).北京: 人民郵電出版社, 2006