999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

ACE框架在網絡游戲服務器中的設計與應用

2008-04-12 00:00:00萬旺根
現代電子技術 2008年8期

摘 要:由于操作系統及通信平臺的多樣性,通信軟件開發者往往要面對諸多問題,而利用軟件設計模式能夠幫助開發者成功完成任務并開發出高性能的通信軟件。介紹ACE框架在通信領域中的面向對象的設計模式以及使用ACE框架構建通信系統軟件所帶來的優勢,并提出了一種網絡服務器架構以及基于模塊設計服務器系統軟件的思想。最后結合具體應用,詳細講述如何利用ACE中的若干設計模式及組件框架進行網絡服務器通信底層模塊的設計和實現。

關鍵詞:自適配通信環境;中間件;網絡服務器系統;設計模式

中圖分類號:TP393文獻標識碼:B

文章編號:1004-373X(2008)08-153-04

Design and Application of ACE Framework in Networked Game Server

TAO Dao,WAN Wanggen

(School of Communication and Information Engineering,Shanghai University,Shanghai,200072,China)

Abstract:Due to difference of hardware and diversity of communication system,developers of communication software have to face many problems.Those problems can be solved by using software design pattern and programmers are easier to develop highperformance communication software.This paper introduces the OO design pattern of ACE framework in communication and its advantage.It also puts forward an idea of networked server architecture and modularization design in software.At last this paper illustrates how we use the design pattern and the module of the ACE framework to design the basic communication module of our game networked game server software.

Keywords:adaptive communication environment;middleware;network server system;design pattern

隨著計算機網絡的發展,特別是因特網的出現,數字娛樂和網絡游戲產業得到了蓬勃的發展,異軍突起的網絡游戲成為中國網絡產業中的先鋒。而由于信息技術的進步,計算機、手機以及不同的傳媒終端等不斷涌現,如何將這些眾多不同的終端通過互聯網進行互聯互動成為一大技術難點,而這些難點的突破取決于網絡游戲服務器的開發。目前在各種服務器通信軟件的設計和開發中,已經廣泛地使用到軟件設計模式。尤其在大型的服務器通信軟件開發中常會采用模塊化設計。當一個龐大的服務器系統執行任務時,往往要通過其中不同的模塊進行協作完成,在這種情況下各機間的數據通信會變得異常繁瑣和復雜。另外不同操作系統通信機制的不同也會影響通信軟件的開發和效率,網絡編程人員通常從底層進行開發,這大大增加了軟件開發的難度和周期。針對以上存在的問題,ACE自適應通信構架給出了良好的解決方案,ACE能夠跨越多種操作系統平臺,可進行通用的網絡編程任務,并結合軟件設計模式[1],避免了通信軟件根據不同環境需要重新開發的弱點,減少了軟件開發的周期和資金,簡化和強化了系統的設計實現。

1 ACE框架

ACE自適應通信環境(ADAPTIVE Communication Environment)[2]是可以自由使用、開放源碼的面向對象(OO)框架(Framework),在其中實現了許多用于并發通信軟件的核心模式。ACE提供了一組豐富的可復用C++ Wrapper Facade(包裝外觀)和框架組件,可跨越多種平臺完成通用的通信軟件任務,其中包括:事件多路分離和事件處理器分派、信號處理、服務初始化、進程間通信、共享內存管理、消息路由、分布式服務動態(重)配置、并發執行和同步等。ACE體系結構[3]包括3個基本層次:操作系統適配層、C++包裝層、框架組件層。操作系統適配層直接駐留在用C寫成的本地OS API之上,將ACE中的其他層與OS API 相關聯的平臺專有特性屏蔽開來。由于ACE操作適配層所提供的抽象,極大地增強了ACE的可移植性和可維護性。C++包裝層通過提供類型安全的C++接口簡化通信應用程序的開發,各種應用可以有選擇地繼承、聚合或實例化其中的組件來使用這些包裝。ACE還包括一個高級的網絡編程框架,集成并增強較低層次的C++包裝層,該框架支持并發分布式服務動態配置。

大多數的網絡化應用可以通過ACE這樣的可移植中間件進行開發,因為ACE封裝并加強了本地操作系統機制,通過其組件可以移除底層操作系統API的繁瑣和易錯性創建可重用的網絡程序。

2 網絡游戲服務器系統框架的設計

在設計網絡服務器的過程中,如何保證服務器的安全和最大限度地支持更多的客戶端連接是擺在開發者面前一個重要的問題。為了解決這2大問題,根據經驗,在開發游戲服務器的過程中,采用如下的服務器架構可有效解決上述2個問題。

2.1 支持Gate的游戲服務器架構

在該架構下,Client和Gate Server相連,而不是直接和Game Server相連。Gate Server主要負責轉發客戶端和Game Server之間的數據包,Game Server負責處理游戲的所有邏輯。如圖1所示。

圖1 支持Gate的服務器系統架構

采用該架構,有如下幾個優點:客戶端通過Gate Server和游戲服務器Game Server相連,Game Server IP對外不可見,這樣Game Server更安全、更不易受攻擊。一個Game Server同樣也可以對應若干個Gate Server,當某個Gate Server受攻擊或停機后,其他的Gate Server仍然照常運行,和其他Gate Server相連的客戶端仍然可正常進行游戲;可支持更多的客戶端連接。Gate Server把眾多的客戶端連接分散到多個Game Server中去,而不是獨自來承擔,從而可支持更多的客戶端連接;Gate Server可分擔一部分安全管理工作,減輕Game Server的壓力。例如若某個客戶端在一段時間內不發數據包,則把該客戶端踢下線的工作可由Gate Server來完成。

2.2 軟件功能模塊劃分

在設計服務器框架時,有一個基本原則,即框架和通信底層的具體實現需要分離,通信底層的具體實現不影響框架代碼的修改。因為通信底層的具體實現有很多方式,不同操作系統平臺的具體實現差別也很大。例如僅在Windows平臺下就有基于Windows消息機制的、基于事件機制的、也有基于完成端口I/O模型的實現等。采用框架與通信底層相分離的原則,也有利于利用一些成熟的開發框架,比如使用的ACE框架。這樣,當采用一種新的通信技術實現通信底層時,則可以不改變服務器框架,而只需要修改通信底層。在設計服務器時按照服務器框架與通信底層相分離的原則,將服務器框架設計為多個模塊。并生成相應的動態鏈接庫以供調用。軟件模塊框架如圖2所示。

圖2 軟件模塊框架

在軟件模塊劃分中,通信底層由線程模塊和通信模塊組成,上層則由同步、聯機管理和興趣區管理等模塊組成。其中同步模塊是基于保守/樂觀的同步算法構建的服務器同步子系統,客戶端方面則可以使用航位推測法減少服務器的發包頻率。興趣區管理模塊用于相關性信息過濾,通過訂購玩家感興趣的范圍,可以有效減低網絡帶寬消耗和服務器負載。聯機管理模塊主要負責數據封包中的通信協議以及數據報的壓縮和加密,在數據包中采用加密以增加服務器系統的安全性能,采用壓縮以減少網絡帶寬消耗。

3 服務器系統通信底層的實現

3.1 線程模塊的實現

在設計線程模塊中使用ACE框架中的ACE _Task類和ACE _Message _Queue來實現主動對象模式[5],用于處理主動對象,實現多線程處理。傳統的對象是被動的代碼段,對象中的代碼是在對他發出方法調用的線程中執行的,當方法被調用時,調用線程將阻塞,直至調用結束。而主動對象卻不一樣。這些對象具有自己的命令執行線程,主動對象的方法將在自己的執行線程中執行,不會阻塞調用方法。由于主動對象的方法調用不會阻塞,這樣就提高了系統響應速度。

設計中主動對象繼承ACE _Task,應用open進行初始化,并派生線程去循環判斷方法隊列中是否有方法對象,若隊列不為空則將方法出隊并執行。如圖3所示。

在創建任務和主動對象時,從ACE _Task類派生子類,在子類派生之后,采取以下步驟:

(1) 實現服務初始化和終止方法:open()方法應該包含所有專屬于任務的初始化代碼;close()方法則包含相應的終止方法。

(2) 調用啟用(Activation)方法:在主動對象實例化后,必須通過調用activate()啟用他。在主動對象中創建的線程的數目,以及其他一些參數,需傳遞給activate()方法,activate()方法會使svc()方法成為所有他生成的線程的啟動點。

(3) 實現服務專有的處理方法:在主動對象被啟用后,各個新線程在svc()方法中啟動。

圖3 任務結構示意圖

并發策略實現的程序流程如圖4所示:

圖4 線程模塊執行流程圖

3.2 通信模塊的實現

3.2.1 反應器ACE Reactor和前攝器ACE Proactor

ACE Reactor(反應器)和Proactor(前攝器)是可擴展的面向對象多路分離器[4],他們分派應用專有的處理器,以響應多種類型的基于I/O、定時器、信號和同步的事件。

ACE _Reactor反應器應用于同步I/O操作,實現了事件的多路分離與分派,能夠處理多個來源的I/O。使用反應器框架,需要執行3個步驟: 從ACE_Event_Handler派生一個和多個事件處理器類,并定義相應的事件處理行為;向ACE _Reactor類登記應用的事件處理對象;運行ACE _Reactor事件循環,事件發生時回調事件處理器中的事件處理函數。

ACE_Proactor應用于異步I/O操作,他與反應器不同的是首先等待事件的完成,然后回調完成后的事件處理。當初始化I/O讀寫后把讀寫交給系統完成,等待事件完成后前攝器會將執行I/O結果返回給對象,并且回調完成后的事件處理。 前攝式模型允許單個應用線程同時發起多個請求。這一設計允許單線程化應用并發的執行多個I/O操作,并且不會帶來與傳統的多線程化機制相關聯的開銷或設計復雜性。這樣做大大減少了I/O處理時間。

3.2.2 利用前攝器實現高效異步I/O數據通信

在實現通信模塊中使用的前攝器模式主要參與者有前攝發起器、完成處理器、異步操作、異步操作處理器、完成分派器[5]。其結構如圖5所示:

圖5 前攝器模式參與者

其中,前攝發起器(服務器應用的主線程)是應用中任何發起異步操作的實體。他將完成處理器和完成分派器登記到異步操作處理器。完成處理器接口用于異步操作完成通知,異步操作則是被用于代表應用執行請求。當異步操作完成時,異步操作處理器將應用通知委托給完成分配器。異步操作是由異步操作處理器來運行直至完成的,該組件通常由操作系統實現。完成分派器負責在異步操作完成時回調應用的完成處理器。當異步操作處理器完成異步發起的操作時,完成分配器代表應用執行應用回調。該機制的實現交互圖如圖6所示:

圖6 前攝器模式交互圖

3.2.3 通信連接的建立

在具體通信模塊中,所用到的ACE主要類有異步連接類、服務處理類、異步操作類和處理結果類。建立連接的過程為:創建異步主動連接和被動連接子類,在進行異步連接時,創建新的服務處理類,并將該服務類傳遞給異步連接類,這樣,數據的傳輸就交給服務類去執行。實現服務處理子類中提供的掛鉤方法,并通過創建ACE_Sock_Stream和異步讀寫流類來進行異步通信。在異步讀寫流初始化時將其注冊到已創建的proactor中,并保存異步讀寫流類的句柄。最后數據傳送的結果和狀態交給處理結果類來處理。異步通信的初始化:

(1) 分別創建異步主動連接類的派生類和被動連接類的派生類

class TCommandChannelConnectorAceImpl : public ACE_Asynch_Connector< TCommandChannelAceImpl >

class TCommandChannelAcceptorAceImpl : public ACE_Asynch_Acceptor< TCommandChannelAceImpl >

(2) 創建主動連接類對象connector和被動連接類對象acceptor;

(3) 對于主動連接,調用connector.open(…),并將其注冊到Proactor,由框架自動創建異步通信服務類,并且自動檢測連接建立狀態;

(4) 對于被動連接,調用acceptor.open(…),并將其注冊到Proactor,由框架自動創建異步通信服務類,并且自動檢測連接建立狀態,處于等待偵聽狀態;

整個異步通信機制實現的流程如圖7所示:

圖7 異步通信的實現

3.2.4 ACE_Proactor完成多路分離

ACE_Proactor類負責驅動前攝器框架的完成處理。要讓異步I/O完成事件處理得以發生,還需要運行前攝器的事件循環,其流程圖如圖8所示。

圖8 Proactor事件循環流程

4 結 語

本文設計了一種適用于開發網絡游戲的服務器端架構,并應用ACE框架組件和面向對象的設計模式完成服務器底層通信的開發。ACE作為一種免費開源的中間件,富含網絡與系統編程的實用設計模式[6],具有跨平臺等優越特性,能夠適合任何通信軟件的開發。尤其對于網絡游戲服務器開發者而言,ACE無疑是一種值得借鑒的通信框架,具有良好的應用前景。

參 考 文 獻

[1]Schmidt D C,Huston S D.Mastering Complexity with ACE and Patterns.C++ Network Programming,2001.

[2]Douglas C.Schmidt.ACE自適配通信環境中文技術文檔[EB/OL].馬維達,譯.http://www.flyingdonkey.com/ace/.

[3]王繼剛,顧國昌.構架與模式在通信系統軟件中的應用研究[J].計算機應用,2003,23(11):4345.

[4] Schmidt D C,Huston S D.Systematic Reuse with ACE and Frameworks.C++ Network Programming,2002.

[5]Stephen D Huston,James C E Johnson,Umar Syyid.Practical Design Patterns for Network and Systems Programming\\[Z\\].The ACE Programmer′s Guide,2004.

[6]高鵬.通過設計模式構造的通信應用服務器框架[J].計算機科學,2004(2):89.

[7]陳琳.中間件技術的研究與實現\\[J\\].現代電子技術,2006,29(12):7678.[HJ0]

作者簡介 陶 道 男,1983年出生,碩士研究生。主要研究方向為計算機通信網絡、網絡虛擬環境、網絡游戲服務器。

萬旺根 男,1961年出生,教授,博士生導師。主要研究領域為虛擬現實技術、互動數字媒體、多媒體信號處理。

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文

主站蜘蛛池模板: 国产亚洲高清在线精品99| 久久精品66| 国产精品网址你懂的| 欧美一道本| 国产一级一级毛片永久| 国产免费观看av大片的网站| 人妻精品久久久无码区色视| 97人人模人人爽人人喊小说| 国语少妇高潮| 一边摸一边做爽的视频17国产| 99国产精品一区二区| 自慰高潮喷白浆在线观看| 夜夜拍夜夜爽| 久热中文字幕在线| 天天操天天噜| 国产偷国产偷在线高清| 就去吻亚洲精品国产欧美| 亚洲色图欧美在线| 亚洲第一黄片大全| 亚洲天堂区| 免费看a级毛片| 精品国产免费人成在线观看| 91精品最新国内在线播放| 亚洲色图欧美| 久久无码av三级| 女人18毛片一级毛片在线| 国产欧美成人不卡视频| 国产精品黄色片| 日韩av在线直播| 99视频在线免费| 91视频区| 日日拍夜夜操| 久久91精品牛牛| 一区二区三区高清视频国产女人| 午夜精品影院| 狠狠色丁香婷婷综合| 中文无码精品a∨在线观看| 国产农村1级毛片| 欧美人在线一区二区三区| 成人午夜精品一级毛片| 中国国语毛片免费观看视频| 精品国产成人三级在线观看| 性做久久久久久久免费看| 成人免费午夜视频| 亚洲精品爱草草视频在线| 97免费在线观看视频| 热久久这里是精品6免费观看| 99九九成人免费视频精品 | 日韩欧美中文| 亚洲人妖在线| 制服丝袜一区| 国产精品亚洲五月天高清| 色婷婷亚洲综合五月| 欧美人在线一区二区三区| 九九热在线视频| 亚洲一区二区三区麻豆| 久久亚洲高清国产| 免费国产小视频在线观看| 久热精品免费| 免费一级毛片在线观看| 国产伦片中文免费观看| 日本午夜三级| 国产在线观看精品| 国产精品视屏| 欧美激情综合| 欧美视频免费一区二区三区| 国产av剧情无码精品色午夜| 午夜毛片免费观看视频 | 久久毛片网| 波多野结衣AV无码久久一区| 亚洲国产精品VA在线看黑人| 亚洲精品无码日韩国产不卡| 91啪在线| 国产精品亚洲天堂| 黄色网站不卡无码| V一区无码内射国产| 欧美日韩福利| 国产主播喷水| 中文纯内无码H| 国产精品jizz在线观看软件| 亚洲成人动漫在线观看| 国产成人精品一区二区免费看京|