基於多層結構的網絡遊戲平臺的研究與應用

基於多層結構的網絡遊戲平臺的研究與應用

學科專業:  計算機軟件與理論
研究方向:  計算機軟件
導    師:  李  祥 教授
研 究 生:  匡  華
中國 · 貴州 · 貴陽 2007年 5 月
本文的主要工作在《天驕II》、《傲世online》、《鳳舞天驕》中得到了實際運用
目    錄

第一章 前言 8

1.1 網絡遊戲平臺的發展背景 8 1.2 國內外現狀 9 1.3 本文的研究內容 9

第二章 網絡遊戲概述 10

2.1 網絡遊戲的概念 10 2.2 網絡遊戲的類型 10 2.3 國內網絡遊戲的發展歷程 12 2.4 網絡遊戲的特徵 13

第三章 應用平臺體系結構 14

3.1 C/S模式 14 3.1.1 C/S工作原理 14 3.1.2 TCP工作機制 14 3.2 B/S模式 16 3.2.1 B/S工作原理 16 3.2.2 HTTP工作機制 17 3.3 C/S模式與B/S模式的比較 18 3.4 三層及多層軟件體系結構 18 3.4.1 二層結構的退出 18 3.4.2 三層及多層結構原理 19 3.4.3 三層及多層結構的特點 21

第四章 網絡遊戲平臺的體系結構及關鍵技術 22

4.1 基於集羣技術的四層平臺體系結構 22 4.1.1 集羣的提出 22 4.1.2 集羣技術的概念及特點 22 4.1.3 平臺體系結構 23 4.2 遊戲通信平臺GateServer 25 4.2.1 通信平臺GateServer的設計框架與特點 26 4.2.2 通信平臺GateServer網絡底層 28 4.2.3 通信平臺GateServer網絡中層 30 4.2.4 網絡通信平臺GateServer的接口設計 31 4.3 統一格式的通信數據包 32 4.3.1 通信包的設計 32 4.3.2 通信包的通信控制 34 4.4 多線程實現 36

第五章 網絡遊戲平臺的總體設計 38

5.1 平臺設計目標 38 5.2 平臺架構設計 39 5.2.1 平臺開發運行環境 39 5.2.2 四層C/S體系架構 41 5.3 平臺網絡結構 43 5.4 平臺數據庫設計 43 5.5 平臺功能模塊設計 45 5.5.1 系統服務模塊 45 5.5.2 受控安全模塊 46 5.5.3 啓動平臺模塊 47 5.6 平臺的容災機制 48 5.7 平臺的安全性設計 49 5.8 平臺的特點與可擴展性 50

第六章 遊戲服務器實現 52

6.1 總體框架 52 6.2 網絡層實現 52 6.3 命令處理層實現 53 6.4 虛擬世界層實現 54

第七章 總結與展望 59

參考文獻 60 致謝 62 攻讀碩士學位期間發表的論文 63

詳細摘要

目前中國網絡遊戲產業迅速發展,2004年中國網絡遊戲市場價值達24.7億元人民幣, 年增長47.9%,預計2009年中國網絡遊戲出版市場銷售收入將達到109.6億元。我國網絡 遊戲玩家已接近2000萬人。如此龐大而且正在快速增長的玩家隊伍,無疑是發展網絡遊戲 的巨大潛力和基礎。我國網絡遊戲的巨大市場潛力、高獲利性、高成長性的清晰的盈利模式, 使網絡遊戲成爲互聯網行業中最被看好的產業之一,這樣一塊巨大蛋糕的誘人前景,無疑將 引來激烈的拼搶,同時使網絡遊戲行業得到空前的發展。 雖然遊戲行業發展迅速,但是從整體上來看影響網絡遊戲運營成敗的有兩個關鍵因素: 一個是遊戲本身的可玩性與後期運營;另一個就是從架構上來保證整個系統的穩定、高效運 行。同時,隨着遊戲用戶規模飛速增長,Internet規模急劇擴大,帶寬不斷增加,需求趨向 多樣化,服務器承受的壓力隨之越來越大。在這種情況下,迫切需要具有快速響應能力、高 可伸縮、高可用、易於管理的信息服務器,能夠在任何時候高質量地處理大規模用戶的併發 服務請求。集羣系統具有很高的整體性能(如響應時問、吞吐率)、高可伸縮性、高可用性、 更高的性能/價格比,是目前國內外構建高性能、複雜的分佈式應用的主要發展方向。採用 集羣技術作爲支撐網絡遊戲平臺已成爲一個主導趨勢。 現在,快速以太網、千兆以太骨幹網基礎和高性能、高可靠性的服務器已經成爲網絡遊 戲網絡運營的核心,三層和多層軟件體系結構以及集羣技術的逐步成熟,使得網絡遊戲平臺 的研究和開發完全成爲可能,並能滿足幾十萬用戶同時在線。其中,集羣技術是隨着計算機 在社會生活的各個層次廣泛應用近年來迅速發展、壯大起來的一個軟件領域,是大型系統解 決負載均衡問題的關鍵技術。 三層和多層結構的客戶/服務器模型是一種先進的協同應用程序開發模型。隨着網絡通 信技術和計算機技術的不斷髮展,企業的信息系統和以往相比,有了巨大的進步。企業級的 應用不再滿足於簡單的客戶/服務器系統,而是向着三層和多層體系結構的分佈式環境不斷 邁進。多層結構應用軟件與傳統的C/S模式下的兩層結構應用軟件相比,有着可伸縮性好、 可管理性強、安全性高、軟件重用性好以及節省開發時間等諸多優點。在Internet/Intranet 環境下,這些優點顯得更加突出。在三層或多層設計模型中,將數據庫訪問分佈在一個或多 箇中間層。客戶程序與數據庫的連接被中間層屏蔽,客戶程序只能通過中間層間接地訪問數 據庫。中間層可能運行在不同於客戶機的其它機器上,經過合理的任務劃分與物理部署後, 可使得整個系統的工作負載更趨均衡,從而提高整個系統的運行效率。 集羣技術解決了大型系統負載均衡的問題,它能更好地滿足大型系統業務、性能以及規 模等日益增長的需求。隨着計算機網絡的發展及大規模科學計算如基因數據的分析、氣象預 報、石油勘探對服務器的性能要求越來越高,對計算機的性能提出了更高的要求:需要硬件 有靈活的可擴展性,關鍵性的業務需要可靠的容錯機制。但是已有工作模式,對新的需求卻 顯得力不從心。因此,如何保證一個大型系統具有處理速度快、I/O吞吐量大,容錯性好、 可靠性高,而且還具有良好的可擴展能力,成爲當前急需解決的課題。同時在網絡應用中, “負載均衡”已經不能算是什麼新鮮話題了,從硬件到軟件,也都有了很多的方法來實現負 載均衡。我們這裏討論的負載均衡,並不是指依靠DNS轉向或其它硬件設備等所作的負載 均衡,而是指在應用層所作的負載均衡。在此需求環境下,集羣系統應運而生。和傳統的高 性能計算機技術相比,集羣技術可以利用各檔次的計算機作爲節點,不僅系統造價低,還可 以實現很高的運算速度,完成大運算量的計算,能夠逐步滿足當今日益增長的信息服務需求。 在服務器集羣系統中,服務器不再分佈在各處,而是集中在一起進行統一管理和維護。系統 保持了分佈式客戶機/服務器模式的開發性、可擴展性的優點,同時又具備了終端/主機模 式的資源共享和集中易於管理的優點。在今後的面向Internet的服務型應用中,以高性能的 硬件平臺作爲支持,將並行技術應用在服務器領域中,是計算機發展的必然趨勢。並行處理 技術在高性能計算領域中,高可用和高性能是集羣服務器系統發展的兩個重要方向。 針對上述討論,作者提出了以集羣技術爲基礎框架的多層軟件體系結構的網絡遊戲平 臺,本系統的設計開發目標就是要建立一個穩定、可靠的網絡遊戲平臺來吸引並維持住廣大 的遊戲玩家。 本文對軟件體系結構進行了概述,重點討論多層軟件體系結構技術,同時研究分析了集 羣技術。結合實際,利用多層結構、集羣技術在網絡遊戲平臺中進行了具體的應用。本文的 研究內容包括: 第一章主要介紹了課題的發展背景、研究的目的和意義、國內外研究的狀況 以及本文主要研究的內容。 第二章介紹了網絡遊戲的概念、類型、國內的發展歷程及其特徵, 使我們對網絡遊戲有一個比較清楚的認識。 第三章主要闡述了目前應用平臺採用的體系結 構,包括C/S模式的工作原理及相應的TCP工作機制,B/S模式的工作原理及相應的HTTP 工作機制,並對C/S 與B/S這兩種模式進行了比較。最後介紹了已經廣泛應用於系統中的 三層及多層軟件體系結構。 第四章介紹了網絡遊戲平臺的體系結構及其關鍵技術。首先介紹 了基於集羣技術的四層平臺結構,包括集羣的提出、概念及特點和平臺結構的詳細描述。然 後介紹了相關的關鍵技術,包括遊戲通信平臺GateServer的設計與實現、通信數據包的設計 和多線程的實現。 第五章介紹了平臺的總體設計。包括設計的目標,軟、硬件平臺的選擇, 體系架構的設計,系統的網絡部署結構,數據庫的設計,平臺功能模塊(包括系統服務模塊、 受控安全模塊和啓動平臺模塊)的設計,平臺的容災機制、安全性設計、特點與可擴展性等。 第六章詳細闡述遊戲服務器的實現過程。首先介紹了遊戲器服務器的總體框架,包括網絡層、 命令處理層和虛擬世界層三個部分,然後分別對它們的實現進行了詳細的描述。 第七章總結 研究工作和全文,並提出了一些改進的地方和未來的工作方向。

本文研究的關鍵技術、創新點和所做的工作如下:

1. 學習研究了網絡遊戲的相關知識。對網絡遊戲的概念、發展歷程、分類、特徵等進 行了詳細的研究與論述。 2. 深入研究並分析了應用平臺的體系結構。對當前已廣泛應用的C/S模式、B/S模式和 多層結構的原理及特點作了研究和分析。 3. 自主設計了網絡遊戲平臺的基本架構,要點如下: ⑴根據遊戲用戶數量需求、網絡技術現狀和負載均衡等基本要求,採用了集羣技術。集 羣系統中可以動態地加入新的服務器和刪除需要淘汰的服務器,具備很強的可擴展性,從而 能夠最大限度地擴展系統以滿足不斷增長的應用的需要;另外,集羣系統具有可用性,即能 夠爲用戶提供不間斷的服務,當系統中的一個結點出現故障的時候,整個系統仍然能夠繼續 爲用戶提供服務;同時,由於玩家是分佈在不同地區的,我們把一個完整的遊戲世界服務器 集羣系統放置在不同區域,這樣就使得玩家可以訪問離他們最近的服務器集羣系統,對玩家 來說體驗到更快的響應速度,對服務提供商來說節約網絡帶寬,降低成本。 ⑵我們採用了服務器集羣技術,並將平臺設計爲四層的C/S結構,第一層是客戶端,提 供用戶接口。第二層是遊戲通信平臺(網關服務器),這是服務器集羣的唯一入口,轉發所 有的功能請求給服務結點池中的具體服務器,並處理所有的非功能請求,並管理終端用戶、 進行狀態保持、日誌記錄等。第三層是提供實際服務的服務器羣,處理並且僅處理所有的功 能性請求,不參與用戶管理、狀態保持等,提供最純粹的功能服務。第四層是數據庫存儲系 統,負責管理對數據的讀寫和維護,爲整個集羣內部運行提供穩定、一致的數據存取服務。 ⑶數據服務器採用備份功能和建立專門的災備中心,保證平臺系統可靠運行。 (4)從網絡環境、法律上人爲規定製度、數據安全與系統可靠性、權限管理、系統監控 等多個方面設計來保證整個平臺系統的安全性與可靠性。 4. 網絡遊戲平臺中實現了下列關鍵技術 ⑴遊戲通信平臺GataServer。GateServer作爲網絡遊戲數據交互的接口,是遊戲客戶端 的接入服務器,實現客戶端到遊戲服務器之間的數據交互。採用Winsocket網絡編程實現玩 家與遊戲服務器的通信,同時在充分考慮“性能”和“可擴展性”兩者兼顧的情況下,我們 將遊戲通信平臺GateServer分爲網絡底層和網絡中層服務兩層結構。專用的遊戲通信平臺有 利於實現合理的負載平衡,形成一個簡單的、一致的、靈活的分佈式處理通信環境。 ⑵通信數據包。它是服務器和客戶端的遊戲協議部分,即遊戲服務器和客戶端的通信規 則。網絡遊戲通信的數據包是網絡包,具有一個確切的邏輯意義的數據包是邏輯包,我們採 用的方式是把多個具有確切的邏輯意義的邏輯包組合成一個網絡包,這樣提高了傳輸效率, 減少了網絡帶寬的佔有率,降低了發送數據包的頻率。 ⑶多線程。在網絡遊戲設計中,由於大量的用戶參與遊戲,所以在服務器端必須使用多 個線程進行網絡接收,發送、處理數據包等操作。而爲了便於對多個線程進行維護,我們將 多個線程封爲線程池類(Thread Pool),用來建立,結束、分配工作線程的工作等任務。 5. 詳細闡述了遊戲服務器的實現過程,討論了遊戲器服務器的總體框架,包括網絡層、 命令處理層和虛擬世界層三個部分,並分別對它們的實現進行了詳細的描述。

本文的主要工作在《天驕II》、《傲世online》、《鳳舞天驕》這三款網絡遊戲中得到了實 際運用,其中《天驕II》的遊戲玩家同時在線人數達到了十幾萬,取得了很好的經濟效益。

作者在讀期間,已經在“計算機應用”等學術刊物上發表論文兩篇。 關鍵詞:網絡遊戲,體系結構,集羣,多線程,通信平臺,通信數據包

The research and application based on multilayer constructed network game platform

Summary Chinese network game estate is at present prompt developing, in 2004 Chinese network game marketable value amounts to RMB 2,470,000,000, grows by 47.9%, it is estimated that Chinese network game publishes the marketplace income from sales of products in 2009 will reach RMB 10,960,000,000. In our country the network game players already approached 20 million. So ample and be rapidly growing players with a team, is the development of enormous network game potential and basis without doubt. Our country network game enormous market has potential, high earn profit, height grow up limpid profit of the pattern clearly, makes network game become one of the most estate that Internet is found satisfactory most in industry, such a piece of enormous cake seducing others to prospect, will attract fierce striving beyond doubt, also will make network game industry get unparalleled development at the same time. Although the game profession development is rapid, but from the whole looked the influence network game operation success or failure has two key aspects: Is plays itself may play the natural and the later period operation; Another is comes up the guarantee overall system from the overhead construction to be stable, the highly effective movement. At the same time, along with the game user scale rapid growth, the Internet scale suddenly expands, the band width unceasingly increases, the demand trend diversification, the server withstands the pressure is more and more big along with it. In this kind of situation, urgent needs to have the fast response ability, high expandable, Gao Ke with the information server which, is easy to manage, can at any time high-grade measures land processes the large-scale user the concurrent service request. The colony system has the very high overall performance (for example when response asked, turnover rate), the high expandability, the high usability, the higher performance/price compared to, is at present domestic and foreign constructs the high performance, the complex distributional application main development direction. Uses the colony technology has become a leading tendency as the strut network game platform. Now, the fast ethernet, kilo mega backbones Ethernet foundation and the high performance, high redundant reliable server already became the network game network operation the core, three were gradually mature with the multilayered software system structure as well as the colony technology, causes the network game platform the research and the development completely becomes possibly, and could satisfy at the same time several hundred thousand users on-line. Among them, the colony technology is along with the computer in social life each level widely a software domain which using the recent years rapid development, expanded, was the large-scale system solution load equalization question essential technology. Customer/server model with three layers and multilayer construction are one kind of advanced coordination application procedure development models. Along with the network communication and the computer technology unceasing development, enterprise's information system and formerly compared, had the huge progress. The enterprise level application no longer satisfies the simple customer/server system, but is unceasingly is making great strides forward to the three layered or multilayered system structure distributed environment. Compare to the two layer structures application software under the traditional C/S pattern, the multilayer construction application software has the good expandability, the strong manageability, the high security, software entrusts with heavy responsibility the nature to be good as well as to save the development time and so on many merits. Under the Internet/Intranet environment, these merits appear prominently. In three or the multilayered design model, distributes the database visit in or many intermediate levels. The customer procedure and the database connection by the intermediate level shield, the customer procedure only can indirectly visit through the intermediate level the database. The intermediate level possibly moves in is different on the client other machines, after passes through the reasonable duty division and the physical deployment, may cause the overall system the operating duty to hasten equilibrium, thus enhances the overall system the operating efficiency. The colony technology has solved the large-scale system load equalization problem, it can satisfy the large-scale system service, the performance as well as the scale well and so on the daily aggregate demand. Along with the computer network development and the large-scale science computation like gene data analysis, the weather forecast, the petroleum prospecting are more and more high to the server performance requirement, set a higher request to the computer performance: Needs the hardware to have the nimble extendibility, the crucial service needs the reliable fault-tolerant mechanism. But the working pattern already had, appears actually to the new demand lacks the ability to do what one would like. Therefore, how guaranteed a large-scale system has the processing speed quickly, the I/O volume of goods handled is big, the fault tolerance good, the reliability is high, moreover also has good may expand ability, becomes the current urgent need solution the topic. Meanwhile in the network application, the loads balance already could not be any new topic, from hardware to software, also all had very many methods to realize the loads balance. The loads balance that we discuss here, is not refers depends upon DNS to change the loads balance which or other hardware equipment and so on does, but refers to the loads balance which does in the application layer. In this demand environment, the cluster system emerged. Compares with the traditional high performance computer technology, the colony technology may use various scales the computer to take the node, not only the system construction cost is low, but also may realize the very high operating speed, completes the big operand the computation, can gradually meet the information service need which day by day grows now. In Cluster Server System, the server is no longer distributed in various places, but together for unified management and maintenance. Distributed systems maintain a client / server model of development, the advantages of scalability, also have a terminal / server model of resource sharing and the advantages of centralized management easier. In next face in Internet service application, takes the support by the high performance hardware platform, the parallel technical application in the server domain, is the inevitable trend which the computer develops.The parallel processing technology in the high performance computation domain, high available and the high performance is the colony server system development two important directions. In view of the above discussion, the author proposed take the colony technology as the foundation frame multi-layered software architecture network game platform, this system design development goal is must establish one stable, the reliable network game platform attracts and maintains generally swims plays the family. The article has carried on the outline to the software architecture, the key discussion multi-layer software architecture technology, simultaneously studied has analyzed the colony technology. Unite the reality, the use sandwich construction, the colony technology have carried on the concrete application in the network game platform. This article research content includes: First chapter mainly introduced the topic development background, the research goal and the significance, the domestic and foreign research condition as well as this article main research content. Second chapter introduced the network game concept, the type, the domestic development course and its the characteristic, enable us to have a quite clear understanding to the network game. Third chapter mainly elaborated at present system structure which uses using the platform, including the C/S pattern principle of work and the corresponding TCP work mechanism, the B/S pattern principle of work and the corresponding HTTP work mechanism, and has carried on the comparison to C/S and the B/S these two kind of patterns. Finally introduced already widely applied in the system three and the multilayered software system structure. Fourth chapter introduced the network game platform system structure and its the essential technology. First introduced based on the colony technology four platforms structure, puts forward, the concept and the characteristic and the platform structure detailed description including the colony. Then introduced the related essential technology, including game communications platform GateServer design and realization, correspondence data packet design and multi-thread realization. Fifth chapter introduced the platform system design. Including the design goal, is soft, the hardware platform choice, the system overhead construction design, the system network deployment structure, the database design, the platform function module (including system service module, is controlled security module and starts platform module) the design, the platform accommodates the disaster mechanism, the secure design, the characteristic and may extended and so on. Sixth chapter detailed elaboration game server realization process. First introduced the game server overall frame, including the network level, the demand processing level and the hypothesized world level three parts, then separately has carried on the detailed description to their realization. The seventh chapter summary research work and the full text, and proposed some improvements places and the future work direction. The article studies the essential technology, innovation and do the work is as follows: 1. The study of the network game related knowledge. To the network game concept, the development course, the classification, the characteristic and so on have conducted the detailed research and the elaboration. 2. Thoroughly studied and analyzes has applied the platform the system structure. To presently already the widespread application C/S pattern, the B/S pattern and the sandwich construction principle and the characteristic have done the research and the analysis. 3. Act on self's own having designed fundamental network game platform frame, essential as follows: (1) According to plays the user quantity demand, the network technology present situation and the load equalization and so on the basic request, has used the colony technology. In the colony system may dynamic join the server which the new server and the deletion needs to eliminate, has very strongly may the extension, thus can maximum limit expand the application need which the system satisfies unceasingly grows;moreover, the colony system has the usability, namely can provide the uninterrupted service for the user, when in a system point appears the breakdown time, the overall system still could continue for the user to provide the service; At the same time, because players distribute in different areas, we lay aside a complete game world server cluster system in the different region, like this causes to play the family to be allowed to visit leaves their recent server cluster system, to players experiences the quicker speed of response, to the service provider said saves the network band width, reduces the cost. (2) We have used the server cluster technology, and the platform design is four C/S structure, first is the customer end, provides the user the connection. The second layer is the communications game platform (gateway server), this is server cluster's only entrance, retransmits all functions request for the service point pond in concrete server, and processing all non- functions requested, and manages the terminal user, carries on the condition to maintain, the diary record and so on. The third layer provides the actual service the server group, processing and only processes all functions request, does not participate in the user management, the condition maintenance and so on, provides the purest function service. The fourth layer is the database memory system, which is responsible for manages of the logarithm according to read-write and maintenance, stably provides, the consistent data access service for the entire colony interior movement. (3)The data server uses the backup function and the establishment special disaster prepares the center, guarantees the platform system reliable movement. (4) From the network environment, the law the artificial stipulation system, the data security and the system reliability, the jurisdiction management, the system monitoring and so on many aspects design guarantee the entire platform system the security and the reliability. 4. In the network game platform has realized the following essential technology. (1) Game communications platform.GateServer took the network game data interactive connection, is plays the customer end to turn on the server, the realization customer end to game server between data interactive. Uses the Winsocket network programming realization to play the family and the game server correspondence, simultaneously fully was considering "the performance" and "might the extension" in two proper attentions to both situations, we play communications platform GateServer to divide into the network first floor and the network intermediate deck serves two structures. The special-purpose game communications platform is advantageous to the realization reasonable load balance, forms simply, is consistent, the nimble distributional processing correspondence environment. (2) Communication data packet.It is the server and the customer end game agreement 's partial, namely game server and customer end correspondence rule. The network game correspondence data packet is the network package, has an accurate logical significance the data packet is the logical package, we use the way is has many the accurate logical significance a logical package of group to synthesize a network package, like this enhanced the transmission efficiency, reduced network band width occupation ratio, reduced the transmission data packet frequency. (3) Multithread. Designs at the network game, because the massive users participate in the game, therefore must use many lines regulation in the server end to carry on the network receive, operation and so on transmission, processing data packet. But in order to be advantageous for to many lines regulation carries on the maintenance, we encapsulate many thread into Thread Pool, will use for to establish, conclusion, assignment labor 作線regulation duty and so on work. 5. In detail elaborated the game server realization process, discussed the game server overall frame, including the network level, the demand processing level and the hypothesized world level three parts, and separately has carried on the detailed description to their realization. The this article prime task in "WOQII", "FOD Online", " Phoenix Dance Tianjiao" in these three section networks game obtained the actual utilization, in which "WOQII" swims plays the family at the same time the online population to achieve several ten thousand, has obtained the very good economic efficiency. The author announces two thesises on academic journals such as reading a period , already "Journal of Computer Applications". Keywords: Network game, System structure, Colony, multithread, Communication platform, communication data packet

 

 

第一章 前    言



1.1 網絡遊戲平臺的發展背景

電腦遊戲行業經過二十年的發展,已經成爲與影視、音樂等並駕齊驅的全球最重要的娛
樂產業之一,其年銷售額超過好萊塢的全年收入。在全球電子遊戲產業中,網絡遊戲的增長
速度最爲迅猛。根據DFC Intelligence 的研究數據,2001年,全球網絡遊戲市場規模爲36 億
美元,2003年已經猛增到76億美元,2004年將進一步增長30%,達到99億美元的市場規
模。互聯網的出現爲電腦遊戲行業發展注入了新的活力,憑藉信息雙向交流、速度快、不受
空間限制等優勢,讓真人蔘與遊戲,提高了遊戲的互動性、仿真性和競技性,使玩家在虛擬
世界裏可以發揮現實世界無法展現的潛能,改變了單機版遊戲固定、呆板、與機器對話的狀
況。網絡遊戲的這些優勢不僅使其在電腦遊戲行業中異軍突起並在某種程度上取代了單機版
遊戲,而且成爲網絡業三大(網上金融、網上教育和網絡遊戲)贏利且利潤優厚的領域之一。
我國已迅速成爲網絡遊戲的大國,網絡遊戲玩家已接近2000萬人。如此龐大而且正在快速
增長的玩家隊伍,無疑是發展網絡遊戲的巨大潛力和基礎。我國網絡遊戲的巨大市場潛力、
高獲利性、高成長性的清晰的盈利模式,使網絡遊戲成爲互聯網行業中最被看好的產業之一,
而2005年近70億元這樣一塊巨大蛋糕的誘人前景,無疑將引來激烈的拼搶,同時使網絡遊
戲行業得到空前的發展。

隨着網絡技術的發展,以及國家政策對有遊戲產業的支持("網絡遊戲通用引擎研究及
示範產品開發"、"智能化人機交互網絡示範應用"兩個項目被納入863計劃,這是我國首次
將網絡遊戲技術納入國家科技計劃,同時國家體育總局已經把電子競技運動確立爲正式的體
育比賽項目)。網絡遊戲產業成爲了蓬勃發展的產業。由於網絡遊戲面對着的是數以百萬的
用戶羣體,一個設計合理、運行高效穩定的遊戲平臺就表現得至關重要,因此對網絡遊戲平
臺的研究、開發自然成了業界的熱門研究方向。
網絡遊戲平臺是一個複雜而又龐大的系統,它幾乎包括了整個網絡遊戲的開發工作:網
絡通信(包括底層、中層)的設計實現、用戶管理、遊戲角色、服務管理、基本遊戲管理員
工具、統計分析、數據備份等功能的設計實現。
今天,網絡遊戲巨大的市場前景,快速以太網和千兆以太骨幹網基礎已經成爲網絡遊戲
運行的核心,這些具備高性能的網絡結構,相匹配的高性能、高可靠性的服務器,如IBM
企業級服務器,也因此被人們視作網絡遊戲平臺的基石。因此,對網絡遊戲平臺的開發和研
究就具有鮮明的現實意義。

一、有強大的市場驅動力,網絡遊戲平臺是網絡遊戲開發的關鍵所在,而網絡遊戲產
業是一個蓬勃發展的新興市場。網絡遊戲是一個巨大的市場。在3到5年裏可能成長爲150
億元的市場。成功的網絡遊戲毛利率可高達八成。當今網絡遊戲的用戶日益龐大,一款網絡
遊戲同時在線人數可能達到10萬級,甚至是50萬級。因此網絡遊戲的市場潛能十分巨大。
而與此同時,市場上成功的網絡遊戲產品佔其全部網絡遊戲產品的比例卻只有20%左右,
有很多網絡遊戲產品的失敗就是因爲其平臺建立的不恰當所置,因此對網絡遊戲平臺的研究
和開發就更有着其巨大的市場價值和經濟利益。

二、開發具有自主知識產權的網絡遊戲平臺對打破外國公司在我國市場的技術壟斷局
面,具有重大的意義。金山公司總裁雷軍曾表示:“網絡遊戲不僅是發展最快的新興產業,
也是最有活力的新文化事業,網絡遊戲必然成爲新娛樂潮流的領導產業之一。網絡遊戲原創
勢力不但要肩負起產業振興的重任,同時要有普及健康向上的遊戲文化的使命感和責任感。
普及健康向上的遊戲文化需要一個過程,我們也應該達到韓國那種全社會積極參與和支持網
絡遊戲產業的水平。”國家正在大力發展和扶持遊戲產業,特別是網絡遊戲產業的發展,開
發有自主知識產權的網絡遊戲產品,建立高質量的網絡遊戲模型,建立國人網絡遊戲,則是
改變當今市場外國網絡遊戲產品壟斷市場的唯一出路。

1.2 國內外現狀



網絡遊戲並不是一個全新的產業,全世界對網絡遊戲投入了巨大的資金,很多公司取得
了斐然的成績,幾年前就有多家大遊戲公司進入中國市場,瓜分國內遊戲市場份額。這幾年
出現了很多國產遊戲公司,有的運營十分成功,也有的開發出自己的網絡遊戲平臺。然而,
網絡遊戲出現飽和現象,競爭十分激烈。大型PC互聯網遊戲很多都是從國外引進的。並且
由很多網絡遊戲都是國外公司開發,這些遊戲充斥了國外的文化,對保護中國文化的正統以
及保護國內玩家帶來了巨大的挑戰。
目前,隨着網絡遊戲開發的發展,網絡遊戲平臺的開發也日趨完善,技術變得越來越成
熟。在國外,網絡遊戲平臺的研究、設計、運行已經取得了很好的效果,像全球著名的遊戲
公司——美國暴雪公司開發的網絡遊戲“魔獸世界”的平臺,韓國網絡遊戲“傳奇”、“熱血
江湖”的平臺在實際運用中已經得到了驗證,能夠滿足同時在線人數達到幾十萬用戶羣。在
國內,由於我國本土的網絡遊戲開發商數量少和技術開發能力有限,因此與國外還存在一定
的差距,但是隨着國內遊戲開發的發展,已經取得了很大的成就,像目標軟件公司開發的網
絡遊戲“天驕”、“天驕II”、“傲世Online”的平臺,金山公司開發的網絡遊戲“劍俠情緣”
的平臺已經能夠很好的滿足用戶需求。
因此,我們可以開發自己的核心平臺,開發出具有中國文化底蘊特色的網絡遊戲,根據
國內玩家的特點,進行市場策劃,佔領巨大的娛樂市場份額,建立功能強大的網絡遊戲運營
系統。

1.3 本文的研究內容



第一章主要介紹了課題的發展背景、研究的目的和意義、國內外研究的狀況以及本文主
要研究的內容。



第二章介紹了網絡遊戲的概念、類型、國內的發展歷程及其特徵,使我們對網絡遊戲有
一個比較清楚的認識。



第三章主要闡述了目前應用平臺採用的體系結構,包括C/S模式的工作原理及相應的
TCP工作機制,B/S模式的工作原理及相應的HTTP工作機制,並對C/S 與B/S這兩種模
式進行了比較。最後介紹了已經廣泛應用於系統中的三層及多層軟件體系結構。



第四章介紹了網絡遊戲平臺的體系結構及其關鍵技術。首先介紹了基於集羣技術的四層
平臺結構,包括集羣的提出、概念及特點和平臺結構的詳細描述。然後介紹了相關的關鍵技
術,包括遊戲通信平臺GateServer的設計與實現、通信數據包的設計和多線程的實現。



第五章介紹了平臺的總體設計。包括設計的目標,軟、硬件平臺的選擇,體系架構的設
計,系統的網絡部署結構,數據庫的設計,平臺功能模塊(包括系統服務模塊、受控安全模
塊和啓動平臺模塊)的設計,平臺的容災機制、安全性設計、特點與可擴展性等。



第六章詳細闡述遊戲服務器的實現過程。首先介紹了遊戲器服務器的總體框架,包括網
絡層、命令處理層和虛擬世界層三個部分,然後分別對它們的實現進行了詳細的描述。



第七章總結研究工作和全文,並提出了一些改進的地方和未來的工作方向。

第二章 網絡遊戲概述



2.1 網絡遊戲的概念

網絡遊戲並沒有一個一致的定義,狹義的理解[3]網絡遊戲專指網絡化的RPG遊戲(角色
扮演遊戲),其目的和方式是建立一個虛擬的世界,在這個世界裏的所有玩家都像是生活一
個全新的社會里,這個社會有它自己的各種“法律”,生活在這個社會里的玩家必須要遵守
這些法律。玩家以追求感受爲目的進行模擬和角色扮演,通過自己角色的成長而感受快樂。
廣義的理解網遊遊戲是一種互動方式的娛樂遊戲,它常被人們誤解爲簡單的聯網或者是
局域網的遊戲。實際上,網絡遊戲具有它自己特有的概念和邏輯世界;網絡遊戲,網際互連
互動遊戲,簡稱:網遊。這裏的網絡指的是國際互聯網((internet),而不是局域網((LAN)或
者單純的廣域網(WAN)的概念。網絡遊戲提供完整的功能:用戶註冊、互動、及時、長期保
存、可增值等很多功能。

互聯網實驗室通過對網絡遊戲進行深入地研究後認爲網絡遊戲的定義如下: 利用
TCP/IP協議,以網絡爲載體,可以多人同時參與的遊戲項目。 由此,網絡遊戲具有以下的
特點:1. 大衆娛樂性;2. 技術領先性;3. 真實競爭性;4. 互動溝通性;5. 經營可靠性。
從技術角度來說,網絡遊戲是綜合性很強的行業,依賴的相關技術包括:遊戲設計、程
序設計、數學、人工智能、圖形圖像、網絡、音頻處理等[45]。在網絡遊戲發展的過程中,
相關技術的發展極大地促進了網絡遊戲的發展,如圖像處理技術的發展使遊戲界面從早期的
文本界面過渡到二維圖形界面,現在3D遊戲己經很普遍[4]。反過來,網絡遊戲的發展也成
爲相關技術的強大市場推動力。

2.2 網絡遊戲的類型

Client/Server結構是現今網絡遊戲最基本的框架。從開發的角度來看,常見Client/Server
結構的網絡遊戲有如下幾種類型[1]:

1 對等的Client和Server

很多對戰型的網絡遊戲都採用這種結構。這裏所謂的對等並不是真正意義上的對等,而
是指在有多個玩家參與的遊戲中,其中一個玩家的機器既是Client有扮演Server的角色,
通常由創建遊戲局的玩家擔任,稱爲主機。這種結構如圖2.1所示。

圖2.1 對等的Client和Server結構


在這裏,主機的作用包括同步的控制、消息的集中轉發、關鍵計算的結果校驗等等,取
決於具體的遊戲類型。具有網絡對戰功能的即時戰略遊戲、第一人稱射擊遊戲以及動作RPG
遊戲多屬於此類,它們通常既可以在局域網上玩,也可以在Internet上玩。

2. 會話的集散地:Lobby

首先明確會話和大廳地的概念。英文Lobby是大廳的意思,以一個提供聊天服務的網
站爲例,登錄之後可以看到網頁上有可供選擇的話題A和話題B。選擇話題A點擊進入,
便可以和所有位於話題A的人聊天。此時,我們把話題A叫作session(會話),並稱所有位
於話題A的人正在進行一場會話。並可以將這樣一個聊天室網站稱爲大廳。可以根據自己
的需要創建會話或加入別人的會話,也可以取消自己所創建的會話。實際上,大廳就是一個
專門的服務器,其作用是爲處於不同位置的玩家牽線搭橋,讓他們可以有機會進行一場遊戲。
可以很快聯想到世界上最著名的遊戲大廳BattleNet,其中有《暗黑破壞神》、《星際爭霸》
和《魔獸爭霸》等廣受歡迎的遊戲,還有國內著名的遊戲網站聯衆,上面運行着各種棋牌類
遊戲。下面來看看大廳和會話的架構,如圖2.2所示。

圖2.2 大廳和會話的結構


當大廳作爲中介把客戶端撮合到一起之後,各客戶端就可以開始遊戲了,隨後的處理要
看具體的遊戲設計。遊戲在進行中,既可以繼續保持和大廳的連接,並不斷地彙報一些遊戲
的信息,也可以斷開和大廳地連接,獨自進行遊戲,遊戲完畢再重新連接上大廳服務器,並
由主機玩家向其彙報戰果。

3. Client:Server的一個可以交互的窗口

並不是所有的網絡遊戲均用對等的Client和Server,並藉助大廳的力量運作起來。很多
時候,需要的是成千上萬的人在進行同一場遊戲,這些玩家在遊戲世界中持續存在並且被記
錄下來,而這種遊戲纔是現在最大的熱門,通常可以稱之爲圖形化多人在線RPG遊戲。這
種遊戲必須用新的架構來實現,圖2.3所示爲一簡略的結構是示意圖,實際應用中爲了滿足
海量人數以及在線互動的需求,結構會複雜得多。

圖2.3 多人在線RPG遊戲結構


    在這種結構種,爲了保證所有客戶端都有相同得遊戲畫面和遊戲結果,關鍵的是數值計
算和邏輯判斷必須放在服務器上,因此服務器上必須具備完整的遊戲世界模型。此時客戶端
更像是在一扇窗口中,從玩家的角度去觀察這個世界,並與之互動。服務器和客戶端的連接
方式和功能劃分與前面提到的兩種有很大的不同。

2.3 國內網絡遊戲的發展歷程

國內網絡遊戲發展的三個階段[2]:

準備期:中國網絡遊戲的準備期處於1995年以前。這一時期的主要特徵是單機版的遊戲
在國內已經形成一定的氣候,並向聯機版遊戲過渡;爲網絡遊戲在我國得以快速發展在人才
和技術等方面做了儲備。

在此階段,單機版的PC遊戲和基於遊戲機和電視的遊戲在中國比較流行,消費者從遊
戲中體會到了其中的樂趣,爲網絡遊戲的市場開發打下比較良好的基礎。
由於價格和知識普及等方面的原因,PC機還沒有形成大規模的普及,因此在這一時期,
玩電腦遊戲的消費羣體還是一些收入比較高的家庭。在這一階段成長起來的遊戲玩家爲今後
網絡遊戲的開發儲備了人才,其中的佼佼者成爲目前網絡遊戲的市場和技術的推動者,甚至
成爲了幾年後國內網絡遊戲業界的遊戲管理員甚至是執行總裁。雖然這一時期,人才方面做
了很多的儲備,但從業經驗和對網絡遊戲的理解方面,與國外的網絡遊戲從業者之間的差距
還是比較大的,尤其是在遊戲公司的運營和遊戲產品的研發設計方面,與國外的網絡遊戲從
業者相比存在着先天的不足。

    這期間,文字的網絡遊戲也開始在中國流行。這些中文文字網絡遊戲大多是從國外盛行
的《東方故事》上改編而來,限於當時國內的上網條件,很大程度上都是在國內各大專院校
的集中式機房裏發展出來的,本質上也就沾染了校園文化氛圍特徵。
發展期:1998年中旬網絡遊戲開始在中國得以嘗試,並在2000年正式在國內被互聯網業
界承認,初步確立了網絡遊戲在互聯網中的地位。中國網絡遊戲的從業者在這一時期對網絡
遊戲有了進一步的認識,並且在經營模式、技術上積累了一定的經驗。與此同時,國外的網
絡遊戲開始進入中國,網絡遊戲市場開始出現新局面。

1998年6月份聯衆開始在東方網景架設服務器,免費提供給國內的上網用戶圍棋、中國
象棋、跳棋、拖拉機、拱豬等共計5種棋牌類網絡遊戲。以此爲起點,中國的網站開始正式
涉足網絡遊戲業務。聯衆對促進網絡遊戲的快速發展和網絡遊戲在互聯網應用中地位的提升
起到了非常重要的作用。其在網絡遊戲運營方面所採取的經營模式和收費模式爲我國網絡遊
戲公司的運營奠定了基礎。

2000年,網絡遊戲開始進入正式的商業化運作,雖然只有《萬王之王》一款遊戲的市場
表現力比較理想,實現了贏利,但這一表現對於持續疲軟的國內遊戲市場和軟件市場,乃至
整個互聯網市場來講,都是一個令業界振奮的事實。

網絡遊戲在互聯網中的地位隨着網絡遊戲的不斷髮展逐漸被加強。2000年年底,經過業
界人士的不斷探索和努力,網絡遊戲已經初步形成了有效的經營模式,實現了一定的收入,
並且在互聯網應用領域逐漸形成產業化的雛形。

混戰期: 2001年至今是中國網絡遊戲的混戰期。

網絡遊戲在發展期時已經呈現出一定的贏利潛力和廣闊的發展空間,因此,正在爲現金
收入煩惱的網絡公司不約而同地將目光投入到網絡遊戲,並且採取了實際的行動。從2000
年年底到2001年年中,《石器時代》、《千年》、《紅月》、《龍族》等等網絡遊戲紛至沓
來。而國內一些開發小組也是一哄而上,網絡遊戲市場一夜之間成爲了中國軟件和網絡行業
的新焦點,也成爲了國內IT業和互聯網業最新的盈利服務項目。不同的遊戲公司都在搭建自
身的遊戲平臺,整個行業的發展缺乏系統的規劃和彼此之間的有效合作。隨之而來的媒體對
網絡遊戲的大肆炒作也渲染了這一網絡應用形式在市場上的巨大作用。2001年第三波遊戲谷
宣佈全面結束單機版遊戲業務,轉爲全面經營在線遊戲。同時,國內各大遊戲公司也紛紛將
公司重心轉爲發展在線遊戲。

由於從業公司數目衆多,使用戶規模沒有得到有效集中,網站的接入收入有所下降。不
同公司的經營水平參次不齊,網上的管理比較混亂,競爭相對無序。從業者更多的代理國外
的遊戲產品,從事自主開發產品的公司比較少,技術和創意方面沒有實質性的突破。國外的
網絡遊戲公司或者遊戲產品大量湧入我國,韓國和海外的廠商們紛紛將網絡遊戲產品拋給國
內的運營商,遊戲產品在國內相對過度。

在這一階段,網絡遊戲的用戶數量得到了快速的發展。沒有持續的資金、技術投入以及
良好的售後服務質量的遊戲廠家將會在這一階段逐漸退出網絡遊戲市場,或者被兼併或者倒
閉。到2002年下半年,我國的網絡遊戲市場將逐漸走向理智。

2.4 網絡遊戲的特徵

網絡遊戲和一般的應用系統不一樣,有它自己獨特的特點: 

    互動性:網絡遊戲最大的特點是互動性,這是它爲什麼那麼吸引玩家的最主要原因。使
得它面對的客戶是最大的用戶羣,幾乎各個階段、各個階層的人員都可能成爲網遊的玩家。
互動性給玩家們提供了高的體驗回報,可以和世界各地玩家娛樂、比技巧、進行各種比賽,
並且提供了持久化的功能,人們付出的勞動成果和智慧結晶都能夠得到積累。

    增值性:這是網遊不同於一般的遊戲和商業應用的主要區別之一。網遊世界中有遊戲幣,
有積分,這些是用戶玩家們的資本,是智慧和勞動成果的體現,遊戲幣和積分等爲各種增值
服務提供了平臺,可以進行積分排行榜,積分兌將,遊戲幣虛擬流通,提供各種虛擬遊戲道
具等等各種增值服務。

    安全性:在網絡遊戲中,安全是一個十分重要的問題。由於它的互動性和增值性,必須
保證通信安全,用戶信息安全,用戶增值信息的安全等,網遊平臺必須提供端到端的安全解
決方案,如加密機制、簽名機制、安全管理、存取控制、防火牆、防病毒保護等等。

    運營性:網絡遊戲不只是簡單的遊戲互動,也不只是技術開發,它是一個運營體系,這
一點和一般的應用有很大的不同,對於公司來說,需要管理遊戲系統,需要很多部門的協調,
宣傳、策劃、市場、技術、運營管理等等。

 

第三章 應用平臺體系結構


3.1 C/S模式

3.1.1 C/S工作原理

  C/S結構,即Client/Server(客戶機/服務器)結構,這一概念最早用於描述軟件的體系結
構,表示兩個程序間的關係,一個是提出請求的應用程序,另一個是服務程序。從概念上講,
C/S模式是一種特殊的協作處理模式,整個應用程序分佈於客戶機和服務器上,兩者都參與
一個應用程序的處理。C/S模式把系統分成兩個基本組成部分:

  客戶機(Client):面向最終用戶,實現各自業務處理、提供人機交互界面;

  服務器(Server):負責有效地管理系統資源,並提供某項服務功能。
    C/S模型方案中客戶應用程序向服務器程序請求服務。這種方式隱含了在建立客戶機/
服務器間通訊時的非對稱性。客戶機/服務器模型工作時要求有一套爲客戶機和服務器所共
識的慣例來保證服務能夠被提供(或被接受)。這一套慣例包含了一套協議。它必須在通訊的
兩頭都被實現。根據不同的實際情況,協議可能是對稱的或是非對稱的。在對稱的協議中,
每一方都有可能扮演主從角色;在非對稱協議中,一方被不可改變地認爲是主機,而另一方
則是從機。一個對稱協議的例子是Internet中用於終端仿真的TELNET。而非對稱協議的例
子是Internet中的FTP。無論具體的協議是對稱的或是非對稱的,當服務被提供時必然存在
“客戶進程”和“服務進程”。

  一個服務程序通常在一個衆所周知的地址監聽對服務的請求,也就是說,服務進程一
直處於休眠狀態,直到一個客戶對這個服務的地址提出了連接請求。在這個時刻,服務程序
被“驚醒”並且爲客戶提供服務一對客戶的請求作出適當的反應。這一請求/相應的過程可
以簡單的用圖3.1表示。雖然基於連接的服務是設計客戶機/服務器應用程序時的標準,但有
些服務也是可以通過數據報套接口提供的。
  
圖3.1 客戶端/服務器的結構


3.1.2 TCP工作機制

  在C/S架構中,客戶端和服務器之間的網絡層通信協議是IP,傳輸層通信協議是TCP
和UDP,TCP是面向連接的,在基於不可靠的IP服務基礎上,提供可靠的傳輸層服務,保
證數據一定傳送到接收者;而U DP提供的是不可靠的無連接數據報傳輸服務,因而可能出
現UDP報文丟失、重複、亂序的錯誤。在大部分C/S架構中,一定要保證數據的可靠傳輸,
因此一般都採用TCP作爲傳輸層協議。TCP在通信會話中提供幾個重要作用。可以認爲它
是多個應用和網絡之間的聯絡。其功能包括:

    ·多路複用多種應用數據。
    ·測試所接收數據的完整性。
    ·順序化亂序接收的數據。
    ·對成功收到數據做出應答。
    ·速率一適應的流控(通過TCP窗口大小)。
    ·定時功能。
    ·重傳在傳輸過程中損壞或丟失的數據。

TCP協議有幾個特點:

    1.  多路複用數據流

    TCP是用戶應用與許多網絡通信協議之間的接口。TCP必須能同時接收多個應用數據,
TCP把它們打包到數據段中,之後傳給IP。相似的,TCP必須能同時接收多個應用的數據。

    TCP必須跟蹤記錄到達的報文要轉發到的應用程序。這可以通過端口來實現。TCP段
中既有源應用端口號又有目的端口號。另一個經常使用的術語是套接字,雖然TCP頭中沒
有套接字域。套接字由駐留在主機上的特定應用端口號和機器IP地址聯合構成。因此,套
接字描述了惟一的主機和應用。“:”號把兩個號分開。比如,套接字10.10.10.10:6666標識
了主機10.10.10.10的應用,其端口號爲6666。

 2.  測試數據的完整性

    封裝在TCP段中的數據經過TCP執行的數學計算,並把結果放在TCP頭的校驗和域中。
一旦數據到達目的地,對接收數據執行相同的數學計算,產生的結果應該和TCP頭中存儲
的結果相同。如果二者相同,有理由相信數據沒被改變過。否則,就要給源主機發一請求,
要求其重發一份數據拷貝。

    3.  重新排序

    到達目的機的報文段經常是亂序的。其中有許多原因,比如,在一個利用率非常高的網
絡中,路由協議很可能對報文選擇通過網絡的不同路徑。這會導致數據段亂序到達。另一種
情況是,報文在傳輸過程中可能丟失或損壞。因此,接收應用程序所需的數據序列會被丟棄。
目的機器的TCP協議會緩衝接收到的數據段,直到能把它們正確地重新排序。

    通過查看TCP頭中的序列號域可以完成這個任務,重新排序就是基於這個域對接收數
據段的數學排序。

    4.  流控

    TCP會話中的源和目的機器稱爲對等實體。每一對等實體有對流向其物理緩衝中數據
流的控制能力。流量控制使用的是TCP窗口大小。源和目的機的窗口大小通過TCP頭進行
通信。

    任何一臺主機將被所收數據淹沒時,會減小發送機的速率。這可以通過通知其新的窗口
大小即可,如果機器的緩衝完全被填滿,它就會發送一個有關最後收到數據的應答報文,其
中新的窗口大小爲0。這樣會有效地使發送停止,直到擁塞的機器能清理掉其緩衝。它所處
理的每一段必須被應答,使用應答,可以通過重新設置大於0的窗口尺寸來啓動發送。

    雖然這個簡單的機制能有效地調整兩臺機器之間的數據流,但是它只能保證通信的端系
統不會被接收的數據所湮沒。窗口尺寸自身不會考慮網絡上存在的擁塞情況。網絡擁塞意味
着報文到達目的地的時間比通常情況長。因此擁塞管理一定是網絡上時間的函數。TCP通
過計時器的使用實現擁塞管理。

    5.  計時機制

    TCP爲幾個關鍵功能使用計時控制。每次傳輸一個數據段時,設置一個計時器。假如
計時器在接到應答之前停止(就是說,減少到0),數據段就被認爲己丟失。因此,會重傳。
計時器可以間接地管理網絡擁塞,其方法是當超時出現時減慢傳輸率。理論上講,當超時出
現時才減小發送速率,因此,TCP不能很好地管理網絡擁塞,但它會減小自身對擁塞的影
響。

    源機器會使用一個堅持(Persist)計時器週期性地查詢目的主機的最大窗口尺寸。在理想
世界中,從不需要Persist計時器,因爲每個應答會包含窗口尺寸。然而,有時網絡確實會
丟失數據。如果一臺機器發生了緩衝上溢問題,併發回一個0窗口尺寸的應答,傳輸節點會
中止發送。但是,如果後序非0窗口尺寸的應答丟失,發送會話會處於危險境地。Persist
計時器通過週期性的詢問窗口大小來保證這種情況不會發生。如果查詢仍不能得到窗口大
小,TCP協議會重新設置連接。

    另一個計時機制稱爲最大段生存時間(Maximum Segment Lifetime MSL)。MSL使TCP
機器識別已經在網絡中傳輸了很長時間的因此己被替換了的數據報,接收到MSL中止的數
據報被簡單拋棄。

    6.  應答接收

    如果ACK被設置,目的TCP機器必須要對接收到的特定數據做出應答。考慮到TCP
幾乎總是用於可靠模式,因此ACK不被設置的情況很少見。

    沒被應答的數據段被認爲在傳輸過程中已丟失,並被重傳。重傳必須在源和目的機器之
間配合進行。

3.2   B/S模式

3.2.1 B/S工作原理

  B/S(瀏覽器/服務器)模式是一種以Web技術爲基礎的新型的系統體系結構。B/S系統採
取請求/響應模式,首先由瀏覽器發起請求,以URI(統一資源定位符)的方式向服務器申請資
源。如果是靜態資源,比如一個純HTML格式的網頁,web服務器直接向瀏覽器返回該網
頁內容;如果是動態資源,web服務器會預先對它做出相應處理,同樣返回HTML格式的內
容。瀏覽器對HTML內容進行語法解釋並顯示,這樣就完成了一次過程。

    瀏覽器和服務器之間通過HTTP協議進行通信,HTTP協議是無狀態的,瀏覽器每次向
服務器請求資源時都會主動建立連接,服務器返回結果後雙方即斷開連接,所以對於服務器
來說,在處理瀏覽器請求時,根本不知上一次請求處理狀況,這和傳統的C/S模式有很大區
別。在這個過程中,作爲客戶端的瀏覽器所做的工作非常有限,只要負責對返回的HTML
內容進行處理,我們知道HTML是一個標準的標註語言,任何瀏覽器都能閱讀和顯示。在
這個意義上說,B/S系統的客戶端是通用的,當我們修改應用系統時,不需對客戶端進行更
新,而且許多操作系統都自帶了瀏覽器,意味着我們可以不用去關心客戶端。

  所以B/S系統幾乎所有的複雜性都在服務器端,在一個典型的B/S系統中,絕大多數
的網頁都是動態的,服務器要經過相應的處理並把它轉化爲HTML格式的內容,才能被瀏
覽器識別出來,這個處理過程隨着服務器不同而有很大差別。當前主流的服務器動態資源處
理技術基本有兩種:

  1.解釋型

  每次客戶請求資源時,服務器解釋執行網頁中的腳本代碼,結合網頁中的HTML標記
返回給用戶,ASP和PHP等都屬於這種類型。

  2.編譯型

  當客戶第一次申請時,服務器先編譯網頁,然後執行代碼,後續的客戶請求就直接執
行編譯後的代碼,JSP就是這種類型的代表。

  從開發效率看,解釋型的方式要優於編譯型的;但性能上,後者要遠遠超過前者,所
以兩者都有很大的市場,在實踐中都被普遍使用。

3.2.2 HTTP工作機制

    在B/S架構中,瀏覽器和服務器之間的應用層通信協議是HTTP(超文本傳輸協議)[41],
所以理解HTTP協議的特點是B/S系統設計的基礎。HTTP是WWW聯盟制定的標準,用
於分佈式協作超媒體信息系統的快速使用協議,是通用的,無狀態的,面向對象的協議,通
過擴展命令(或方法),可用於類似的任務,如名字服務,分佈式面向對象系統。公佈的版本
有HTTP 1.0、HTTP 1.1,下一代的HTTP協議HTTP-NG(Next Generation)仍在制訂之中。

HTTP協議有幾個特點:

    1.  客戶/服務器工作模式

    在HTTP協議中,作爲客戶的WWW瀏覽器與作爲提供WWW網頁數據服務的服務器
之間傳遞請求,應答數據。一個服務器可接受和處理世界範圍內多個客戶瀏覽器的同時訪問,
一個瀏覽器同樣也可訪問世界範圍內的WWW服務器。

    2.  簡單快速

    作爲在客戶與服務器之間傳輸超文本數據的協議,HTTP只規定了少量的用以溝通信息
的請求報文、應答報文,這比因特網上其它的信息服務系統如FTP,Telnet等都要簡單。在
HTTP中定義的幾種請求方法中,要求WWW服務器必須實現的有GET和HEAD,而其它
是可選的。在瀏覽器與服務器建立連接時,瀏覽器只需傳遞必須的請求,應答方法。

    3.  傳輸數據靈活

    雖然被稱爲超文本傳輸協議,HTTP實際上允許傳輸任意類型的數據對象,這功歸於請
求信息與響應信息中都具有的消息首部(message-header)。信息的內容就是關於被傳遞的數據
的信息。

    4.  易於擴充

    作爲一個公開發布使用協議,HTTP具有良好的,可擴充性,如前述,它傳輸的已不僅
僅是超文本數據。在此基礎上針對應用開發者的研究、開發要求,很容易地增加請求方法和
響應狀態,運行於用戶定製的系統之中。經過擴充的服務器,能夠響應原有標準的瀏覽器,
也能夠區別出用戶自己開發的專用客戶程序,做出相應的響應處理。

    5.  無狀態性

    在HTTP 1.0及其以前的版本中,每一次請求,應答的內容、狀態及完成情況不作爲歷
史數據保留到下一階段使用。有關客戶機的狀態信息、用戶消息也不保留在服務器中。服務
器的響應狀態,運作情況也都不反映在客戶本地計算機中。這樣做的優點是HTTP服務器實
現起來比較簡單、程序規模小,大大加快了服務器響應速度,對於早期WWW注重於信息
發佈的情況是比較合適的。

    6.  無連接性

    HTTP協議建立在可靠面向連接的TCP報文傳輸基礎上,無連接指的是在HTTP 1.0中,
客戶與服務器的每次TCP連接只處理一個請求:客戶發起連接後傳遞一個請求,服務器解析
該請求、返回應答數據後立即斷開連接。這種方式的優點同樣也是對HTTP服務器一方來說
實現起來簡單,避免服務器由於保持和維護過多的TCP連接而浪費服務器資源。

    HTTP1.1對有些方面進行了改進,但總的來說,這些特性並沒有多大改變。

    可以看到,B/S和傳統的C/S方式有很大差別。在B/S模式下,複雜性都在服務器端,
客戶端瀏覽器只負責用戶界面,瀏覽器的本地處理能力和資源訪問能力是非常有限的。而在
C/S方式下,作爲客戶端的PC機除了界面顯示,還具有很強的本地處理能力,並可以方便
地獲取本地及服務器上的各種資源。相對於C/S方式,B/S系統的客戶端處理能力太有限了,
再加上HTTP協議的無狀態性質,所以B/S系統對設計開發者提出了更高的要求。

3.3   C/S模式與B/S模式的比較

  根據以上對兩種模式的技術分析,可以看出兩者都各有優勢,下面對C/S模式和B/S
模式的各自優勢作一下比較:

  C/S模式的優勢:

  1) 交互性強是C/S固有的一個優點。在C/S中,客戶端有一套完整的應用程序,在出
錯提示、在線幫助等方面都有強大的功能。B/S雖然也提供了一定的交互能力,但與C/S的
一整套客戶應用相比是太有限了。
  2) C/S模式提供了更安全的存取模式。由於c/S是配對的點對點的結構模式,採用適用
於局域網、安全性比較好的網絡協議,安全性可以得到較好的保證。而B/S採用點對多點、
多點對多點這種開放的結構模式,並採用TCP/IP這一類運用於Internet的開放性協議,其
安全性只服務器來保證。由於採用TCP/IP,必須採用一系列的安全措施,如構築防火牆,
來防止用戶對企業內部信息的竊取以及外界病毒的侵入。

  B/S模式的優勢:

  1) B/S模式簡化了客戶端。它無需像C/S模式那樣在不同的客戶端安裝不同的客戶應用
程序,而只需安裝通用的瀏覽器軟件。這樣不但可以節省客戶機的硬盤空間與內存,而且使
安裝過程更加簡便、網絡結構更加靈活。假設一個企業的決策層要開一個討論庫存問題的會
議,他們只需從會議室的計算機上直接通過瀏覽器查詢數據,然後顯示給大家看就可以了。
  2) B/S模式簡化了系統的開發和維護。系統的開發者無須再爲不同級別的用戶設計開發
不同的客戶應用程序了,只需把所有的功能都實現在WEB服務器上,並就不同的功能爲各
個組別的用戶設置權限就可以了。各個用戶通過HTTP請求在權限範圍內調用WEB服務器
上不同處理程序,從而完成對數據的查詢或修改。
  3)相對於C/S,B/S的維護具有更大的靈活性。當應用邏輯發生變化時,它再爲每一個
現有的客戶應用程序升級,而只需要對WEB服務器上的服務處理程序進行修訂。這樣不但
可以提高公司的運作效率,還省去了維護時協調工作的不少麻煩。如果一個公司有上千臺客
戶機,並且分佈在不同的地點,那麼便於維護將會顯得更加重要。
  4)系統處理負載分佈在WEB服務器上,WEB服務器的數量可以根據訪問量進行擴展配
置,採用CLUSTER結構方式。當用戶數童增多時,性能不會明顯下降。
  5) B/S模式使用戶的操作變得更簡單。對於C/S模式,客戶應用程序有自己特定的規格,
使用者需要接受專門培訓。而採B/S模式時,客戶端只是一個簡單易用的瀏覽器軟件。操作
人員都無需培訓,就可以直接使用。

3. 4 三層及多層軟件體系結構

3.4.1 二層結構的退出

  C/S軟件體系結構,即Client/Server (客戶機/服務器)結構,是基於資源不對等,且爲實
現共享而提出來的,是20世紀90年代成熟起來的技術,C/S結構將應用一分爲二,服務器
(後臺)負責數據管理,客戶機(前臺)完成與用戶的交互任務。

  C/S 體系結構具有強大的數據操作和事務處理能力,模型思想簡單,易於人們理解和接
受。但隨着企業規模的日益擴大,軟件的複雜程度不斷提高,傳統的二層C/S結構存在以下
幾個侷限:

  (1)在傳統的二層C/S結構數據庫應用中,客戶端的機器執行應用程序,連接到後端
的數據庫服務器中存取應用系統所需資料,因爲應用系統的企業邏輯都編寫在客戶端的應用
程序中,造成客戶端非常臃腫,且當應用系統需求改變時,所有在客戶端的應用程序都必須
改變,使維護成本太高。
  (2)二層C/S結構是單一服務器且以局域網爲中心的,所以難以擴展至大型企業廣域
網或Internet;
  (3)軟、硬件的組合及集成能力有限;
  (4)客戶機的負荷太重,難以管理大量的客戶機,系統的性能容易變壞;
  (5)數據的完整性與安全性難以維護[9]。因爲衆多客戶端程序可以直接訪問數據庫服
務器,那麼,在客戶端計算機上的其他程序也可想辦法訪問數據庫服務器,從而使數據庫的
安全性受到威脅。

  正是因爲二層C/S有這麼多缺點,因此,多層C/S結構應運而生。

3.4.2 三層及多層結構原理

  爲提高數據的安全性與系統的可擴充性,可在兩層模型的基礎上考慮採用三層(3-tier)
或多層(N-tier)設計模型,將數據庫訪問分佈在一個或多箇中間層。客戶程序與數據庫的連
接被中間層屏蔽,客戶程序只能通過中間層間接地訪問數據庫。中間層可能運行在不同於客
戶機的其它機器上,經過合理的任務劃分與物理部署後,可使得整個系統的工作負載更趨均
衡,從而提高整個系統的運行效率。

  這些位於中間層的程序又稱應用服務程序(Application Server),因爲它們實際上表達了
一個企業處理信息的主要業務邏輯(Business Logic),即企業的系統模型與功能模型,而客戶
程序僅實現圖形用戶界面,完成終端用戶與業務邏輯之間的交互。從客戶程序的角度來看,
中間層將企業的所有業務邏輯抽象爲更高層次的應用程序接口(API),客戶程序則通過這些
API構建整個企業的應用系統。與典型的兩層模型相比,三層模型或多層模型可更好地支持
對企業業務邏輯的集中控制與管理。

  多層結構應用軟件與傳統的C/S模式下的兩層結構應用軟件相比,有着可伸縮性好、可
管理性強、安全性高、軟件重用性好以及節省開發時間等諸多優點。在Internet/Intranet環境
下,這些優點顯得更加突出。很多公司也提出了多層應用軟件體系結構。三層結構的客戶/
服務器模型是一種先進的協同應用程序開發模型,這種方案將客戶/服務器系統中各種各樣
的部件劃分爲三層服務,它們共同組成一個應用程序,這三層服務包括:

   ●   客戶端服務程序,稱爲表示層;
   ●   業務服務和其它中間層服務程序,通常稱爲業務邏輯層(中間層);
           ● 數據層(數據庫)。
  典型的三層結構如圖3.2所示。

圖3.2 典型的三層結構示意圖


  表示層是應用的用戶接口部分,它擔負着用戶與應用間的對話功能。它用於檢查用戶從
鍵盤等輸入的數據,顯示應用輸出的數據。爲使用戶能直觀地進行操作,一般要使用圖形用
戶接口,操作簡單、易學易用。在變更用戶接口時,只需改寫顯示控制和數據檢查程序,而
不影響其他兩層。檢查的內容也只限於數據的形式和取值的範圍,不包括有關業務本身的處
理邏輯。

  功能層相當於應用的本體,它是將具體的業務處理邏輯編入程序中。例如,在製作訂購
合同時要計算合同金額,按照定好的格式配置數據、打印訂購合同,而處理所需的數據則要
從表示層或數據層取得。表示層和功能層之間的數據交往要儘可能簡潔。例如,用戶檢索數
據時,要設法將有關檢索要求的信息一次性地傳送給功能層,而由功能層處理過的檢索結果
數據也一次性地傳送給表示層。

  通常,在功能層中包含有確認用戶對應用和數據庫存取權限的功能以及記錄系統處理日
志的功能。功能層的程序多半是用可視化編程工具開發的,也有使用COBOL和C語言的。

  數據層就是數據庫管理系統,負責管理對數據庫數據的讀寫。數據庫管理系統必須能迅
速執行大量數據的更新和檢索。因此,一般從功能層傳送到數據層的要求大都使用SQL語
言。
  這些層次並不一定與網絡上的具體物理位置相對應,它們只是概念上的層,藉助這些概
念可以開發出強大的應用程序。使用這種方法設計應用程序,開發人員在網絡上部署進程及
數據時可以有相當大的靈活性,從而有利於實現最佳的性能、更好的安全性以及更方便的維
護。中間層中包括提供業務服務和其它中間服務的部件,是聯繫用戶服務和數據服務的橋樑,
它們響應用戶(或其它業務服務)發來的請求,執行某種業務任務,並對相應的數據進行處理。
用戶不需要直接與數據庫打交道。在實際應用過程中,中間層部件通常可分爲兩個以上的層
次。因此,該應用模型也被稱爲多層次結構。

  三層C/S的解決方案是:對這三層進行明確分割,並在邏輯上使其獨立。原來的數據層
作爲數據庫管理系統已經獨立出來,所以,關鍵是要將表示層和功能層分離成各自獨立的程
序,並且還要使這兩層間的接口簡潔明瞭。

  如果將功能層和數據層分別放在不同的服務器中,則服務器和服務器之間也要進行數據
傳送。但是,由於在這種形態中三層是分別放在各自不同的硬件系統上的,所以靈活性很高,
能夠適應客戶機數目的增加和處理負荷的變動。例如,在追加新業務處理時,可以相應增加
裝載功能層的服務器。因此,系統規模越大這種形態的優點就越顯著。

  在更復雜的多層體系結構中,“廋”客戶與遠程數據庫服務器之間可以加入更多的中間服
務器,如加入一箇中間安全服務器或中間轉換服務器,用於對不同平臺數據進行處理。
  
      分佈式多層結構把整個應用系統的執行分成數個不同部分並且執行在不同的機器中。其
中應用程序服務器作爲中間層集中實現企業邏輯,協調多層之間的請求,並掌握數據集定義
的全部細節和遠程數據庫服務器進行通信,這樣客戶端應用程序就重點放在顯示數據和與用
戶交互上,客戶端應用程序甚至都不需要知道數據在那兒。

3.4.3 三層及多層結構的特點

  與傳統的二層結構相比,三層及多層結構具有以下優點:   

  (1)允許合理地劃分三層及多層結構的功能,使之在邏輯上保持相對獨立性,從而使
整個系統的邏輯結構更爲清晰,能提高系統和軟件的可維護性和可擴展性。
  (2)允許更靈活有效地選用相應的平臺和硬件系統,使之在處理負荷能力上與處理特
性上分別適應於結構清晰的三層;並且這些平臺和各個組成部分可以具有良好的可升級性和開放性。例如,最初用一臺Unix工作站作爲服務器,將數據層和功能層都配置在這臺服務器上。隨着業務的發展,用戶數和數據量逐漸增加,這時,就可以將Unix工作站作爲功能層的專用服務器,另外追加一臺專用於數據層的服務器。若業務進一步擴大,用戶數進一步增加,則可以繼續增加功能層的服務器數目,用以分割數據庫。清晰、合理地分割三層結構並使其獨立,可以使系統構成的變更非常簡單。因此,被分成三層的應用基本上不需要修正。                  
  (3)三層及多層結構中,應用的各層可以並行開發,各層也可以選擇各自最適合的開
發語言。使之能並行地而且是高效地進行開發,達到較高的性能價格比;對每一層的處理邏輯的開發和維護也會更容易些。 
  (4)實現分佈式數據處理。把一個應用程序分佈在幾個機器上運行,可以提供應用程
序的性能,通過冗餘配置還可以保證不會因爲局部故障導致整個應用程序崩潰。
  (5)有利於安全。允許充分利用功能層有效地隔離開表示層與數據層,將一些敏感數
據功能部分封裝在中間層,並授予不同訪問權限,未授權的用戶難以繞過功能層而利用數據庫工具或黑客手段去非法地訪問數據層,可以保證對數據的訪問限制,這就爲嚴格的安全管理奠定了堅實的基礎;整個系統的管理層次也更加合理和可控制。

第四章 網絡遊戲平臺的體系結構及關鍵技術


4.1 基於集羣技術的四層平臺體系結構

4.1.1 集羣的提出

  近年來計算機網絡的發展及大規模科學計算如基因數據的分析、氣象預報、石油勘探對
服務器的性能要求越來越高,對計算機的性能提出了更高的要求:需要硬件有靈活的可擴展
性,關鍵性的業務需要可靠的容錯機制。但是已有工作模式,對新的需求卻顯得力不從心。
因此,如何保證一個大型系統具有處理速度快、I/O吞吐量大,容錯性好、可靠性高,而且
還具有良好的可擴展能力,成爲當前急需解決的課題。在此需求環境下,集羣系統應運而生。

  同時在網絡應用中,“負載均衡”已經不能算是什麼新鮮話題了,從硬件到軟件,也都
有了很多的方法來實現負載均衡。我們這裏討論的負載均衡,並不是指依靠DNS轉向或其
它硬件設備等所作的負載均衡,而是指在應用層所作的負載均衡。

  一般而言,只有在大型在線系統當中纔有必要引入負載均衡,那麼,多大的系統才能被
稱爲大型系統呢?比如動輒同時在線數十萬的網絡遊戲,比如同時在線數在10萬以上的
WEB應用,這些我們都可以理解爲大型系統,這本身就是一個寬泛的概念。

  設計再好的服務器程序,其單個程序所能承載的同時訪問量也是有限的,面對一個龐大
且日益增長的網絡用戶羣,如何讓我們的架構能適應未來海量用戶訪問,這自然就牽涉到了
負載均衡問題。支持百萬級以上的大型在線系統,它的架構核心就是如何將“百萬”這麼大
的一個同時在線量分攤到每個單獨的服務器程序上去。真正的邏輯處理應該是在這最終的底
層的服務器程序(如QQ遊戲平臺的遊戲房間服務器)上的,而在此之前所存在的那些服務
器,都可以被稱爲“引路者”,它們的作用就是將客戶端一步步引導到這最終的負責真正邏
輯的底層服務器上去,我們計算“百萬級在線”所需要的服務器數量,也是首先考慮這底層
的邏輯服務器單個可承載的客戶端連接量。

  集羣技術的提出爲我們解決上述問題提供了切實可行的解決方案,它能更好地滿足大型
系統業務、性能以及規模等日益增長的需求。

  集羣技術在網絡遊戲中的應用體現是:一個網絡遊戲是由很多個遊戲世界組成,而每個
遊戲世界是由多個具有不同功能的服務器組成的服務器羣組,可以爲玩家無限地開獨立的遊
戲世界(即服務器組),以滿足大型玩家在線,可以無限開的都是“具有完整遊戲性的遊戲
世界”,對於網絡遊戲而言,它的一個完整的遊戲地圖就是一個整體的“遊戲世界”。

4.1.2 集羣技術的概念及特點

  集羣系統[16]是由2臺或2臺以上通過網絡或通信線路連接起來的相互獨立而又相互合作
的計算機組成的一種計算機系統,是一種基於消息傳遞的計算模型,可伸縮性好、可用性高、
性能/價格比更高,這一切給用戶提供了一種以較小代價實現高性能並行計算的有效途徑,
因而被廣泛採用。在用戶看來,它是運行在一系列自治處理單元上的普通系統,每個結點有
各自物理內存空間並通過高速鏈路或者標準化網絡連接,實現對同一任務的協同計算。當一
個客戶與集羣相互作用時,集羣就像是一個獨立的服務器。

  和傳統的高性能計算機技術相比,集羣技術可以利用各檔次的計算機作爲節點,不僅系
統造價低,還可以實現很高的運算速度,完成大運算量的計算,能夠逐步滿足當今日益增長
的信息服務需求。在服務器集羣系統中,服務器不再分佈在各處,而是集中在一起進行統一
管理和維護。系統保持了分佈式客戶機/服務器模式的開發性、可擴展性的優點,同時又具
備了終端/主機模式的資源共享和集中易於管理的優點。相對集中的集羣系統,降低了系統
管理的成本,而且還提供了和大型服務器系統相媲美的處理能力。典型的集羣系統代表有
[25]:IBM 的TCP Router,Cisco的LocalDirector,Berkeley的MagicRouter及章文嵩的LVS[20]。

  所以,在今後的面向Intemet的服務型應用中,以高性能的硬件平臺作爲支持,將並行技
術應用在服務器領域中,是計算機發展的必然趨勢。並行處理技術在高性能計算領域中,高
可用和高性能是集羣服務器系統發展的兩個重要方向。

  集羣系統使由完整的計算機互聯組成一個統一的計算機系統具有極高的性能價格比。它
需要專有軟件的支持,比如支持集羣技術的操作系統或數據庫等,硬件方面可以根據不同實
際需求,採用現成的通用硬件設備或特殊應用的硬件設備。集羣系統中可以動態地加入新的
服務器和刪除需要淘汰的服務器,具備很強的可擴展性,從而能夠最大限度地擴展系統以滿
足不斷增長的應用的需要;另外,要求集羣系統具有可用性,即能夠爲用戶提供不間斷的服
務,當系統中的一個結點出現故障的時候,整個系統仍然能夠繼續爲用戶提供服務。

  與其他體系結構相比較,集羣系統具有以下優點:

  a.良好的可擴展性,可以在任意時候任意地擴展集羣系統,不用中斷服務;節點之間
僅僅通過消息傳遞協同工作;每個節點都擁有計算和存貯資源,可以不依賴於其他的節點工
作。通過添加新的節點,就可以在不影響原有服務的情況下提高集羣的負載能力。
  b.良好的系統可用性,個別系統的失效和錯誤不會影響到整個系統,更不會傳播,它
的任務可以傳遞給其他節點,可以實現較高的自動修復處理,可以有效防止單點失效。
  c.高性能,集羣能夠實現負載均衡,負載平衡集羣允許系統同時接入更多的用戶,進
行分佈式部署,易於監控和管理。
  d.良好的性能價格比,大規模機器具有較小的體積,但減少機器使得開發費用上升。

4.1.3 平臺體系結構

  在大型遊戲的應用過程中,實際需要處理的玩家數量過萬甚至幾十萬,一臺普通的服務
器是無法完成所要完成的工作,因此,在實際應用的時候,通常是由一組多臺服務器共同完
成一個完整遊戲世界的功能,即“戰區”的概念。

  一個戰區實際上就是由多臺服務器構成的一個集羣系統,每個玩家所處的遊戲世界就是
一個戰區。由於一個戰區所能容納的玩家數量是有限的,目前一般能承載的人數在2000左
右,因此,面對海量級的玩家,我們可以把玩家分散到不同的戰區中去,以滿足玩家數量的
增長。同時,由於玩家是分佈在不同地區的,我們把一個完整的遊戲世界服務器集羣系統(戰
區)放置在不同區域,這樣就使得玩家可以訪問離他們最近的服務器集羣系統,對玩家來說
體驗到更快的響應速度,對服務提供商來說節約網絡帶寬,降低成本。

圖4.1 基於集羣技術的四層平臺體系結構


  從上圖我們看出,一個大型網絡遊戲是由很多個分佈在不同區域的Internet數據中心
(Internet Data Center)中的服務器集羣系統(戰區)組成,例如他們分別放在華南地區、
華東地區和東北地區的三個不同的IDC中,三個集羣系統都有自己的數據存儲系統,提供
相同的遊戲服務。玩家可以通過Virtual IP Address訪問離自己最近的網絡服務,由相應的集
羣提供服務。例如,華南地區的玩家進入在華南地區的戰區,華東地區的玩家進入在華東地
區的戰區,這一切對用戶來說是透明的。

  網絡遊戲中爲玩家提供服務的是每個服務器集羣系統,即戰區。因此,一個戰區就是一
個獨立的結構,如圖4.1所示,網絡遊戲平臺的體系結構可分爲四個層次。

  第一層是客戶端,提供用戶接口,主要功能是指導操作人員使用界面,輸入數據,輸出
結果,並不具有企業邏輯,或只擁有部分不涉及企業核心的、機密的應用邏輯。這樣客戶端
就顯的很廋,稱爲“廋”客戶。

  第二層是遊戲通信平臺(網關服務器),這是服務器集羣的唯一入口,轉發所有的功能
請求給服務結點池中的具體服務器,並處理所有的非功能請求,並管理終端用戶、進行狀態
保持、日誌記錄等。從客戶端的角度看,集羣通過這層的服務體現爲一個基於IP地址的單
一系統映像(SSI),整個集羣共用這個虛擬地址,通過它客戶端可以把整個集羣看作一個獨
立的具有合法IP地址的主機系統,客戶端的所有訪問都發往這個虛擬IP地址。 

  網關服務器同時有負載均衡的功能,有必要的容錯機制。在現有網絡結構之上,負載均
衡提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高
網絡的靈活性和可用性。主要功能如下:1.解決網絡擁塞問題,服務就近提供,實現地理位
置無關性;2.爲用戶提供更好的訪問質量;3.提高服務器響應速度;4.提高服務器及其他資
源的利用效率;5.避免了網絡關鍵部位出現單點失效。

  第三層是提供實際服務的服務器羣,處理並且僅處理所有的功能性請求,不參與用戶管
理、狀態保持等,提供最純粹的功能服務。客戶端發出的服務請求經過遊戲通信平臺處理以
後,轉交到服務池由具體的服務器響應請求並返回數據。通常我們會在服務結點池上提供遊
戲世界服務器、數據庫服務器和角色存盤服務器。由於單一系統無法應付高峯值得數據訪問,
那麼通過多臺服務器分擔這些負載就比較經濟可行了。 

  服務器結點也有可能出現暫時失效的情況,特別是在結點提供多種服務的時候,系統的
隨機故障或外部環境的突變都可能造成該節點的某個服務暫時不可用。因此,由負載均衡擴
展出的容錯機制要能夠識別這種錯誤,及時進行處理。同樣,當錯誤排除後,集羣能夠自動
識別恢復事件,把好的結點重新納入集羣繼續運行。

  第四層是數據庫存儲系統,負責管理對數據的讀寫和維護,爲整個集羣內部運行提供穩
定、一致的數據存取服務。這一層作爲網絡遊戲平臺的數據層,可以爲集羣節點池提供統一
的數據庫入口,即在每一臺數據處理服務器上都共用一個數據庫IP地址和端口,並且自動
完成不同節點訪問數據庫所引發的文件鎖定、負載均衡、容錯、內容一致、讀寫事務等底層
功能,對應用層提供一個透明的數據庫訪問服務。 

  基於集羣技術的四層網絡遊戲平臺體系結構屬於松耦合集羣系統,不需要在集羣中部署
特殊的中間件層或者OS擴展,對服務器結點OS的兼容性比較好。對於其內部結點而言,
基本上可以兼容多數的IP應用,不需要做複雜的移植和安裝工作,每個內部結點可以看成
相對獨立的服務器系統,功能也是透明的提供給用戶空間,不影響本機的正常的網絡應用。

4.2 遊戲通信平臺GateServer

  網絡平臺的發展給網絡遊戲奠定了堅實的物質基礎,寬帶的迅猛發展爲網絡遊戲提供了
“高速公路”,而專用遊戲服務器的崛起則爲網絡遊戲提供了容量巨大的“加油站”。服務器
和客戶端間的通訊是實現遊戲網絡化的基礎,如何實現服務器與客戶間的及時、穩定的數據
交換是評價一個網絡遊戲優劣的標準,也是衆多網絡遊戲努力的方向。雖然服務器和客戶端
間的通訊質量在一定程度上取決於硬件的質量,如服務器的型號、承載量等,但同時也取決
於軟件質量。本節主要介紹遊戲服務器和遊戲客戶端間數據交換的遊戲通信平臺。

  遊戲通信平臺(Game Communication Platform)在遊戲平臺中通常叫網關服務器
(GateServer),用於遊戲服務器(GameServer)和客戶端(Client)之間數據交換的服務器,
管理所有的玩家和遊戲服務器連接,並且負責客戶端的登陸登出,記費校驗等工作。
  GateServer在遊戲平臺中的位置,如圖4.2所示:
   
     圖4.2 GateServer在遊戲平臺中的位置


  GateServer大致分爲三個組成部分,包括Game Client Manager,Game Server Manager
和DBI Client,在GateServer中,Game Client Manager相對於Game Client(遊戲客戶端)是
作爲其接入的服務器,Game Server Manager相對於Game Server(場景服務器)是作爲其與
遊戲客戶端交互的服務器,DBI Client相對於DBI(數據庫訪問接口)是作爲其訪問數據庫
的客戶端。

  GateServer的主要功能是作爲遊戲客戶端的接入服務器,實現客戶端到遊戲服務器之間
的數據交互,其中網絡傳輸的數據分爲兩個部分,一部分是處理遊戲客戶端和遊戲服務器之
間的高層指令以及數據的轉發,另一部分是處理遊戲客戶端和遊戲服務器對數據庫訪問的數
據請求。

   相關的名詞解釋:
GateServer: 用於GameServer和Client之間數據交換的服務器,管理所有的玩家和
                                GameServer連接,並且負責Client的登陸登出,記費校驗等工作。
GameServer: 運行遊戲邏輯世界的服務器,一般負責管理若干個遊戲場景。
Client: 遊戲客戶端。
User: 用戶,玩家創建的遊戲賬戶,用於登陸的唯一ID。
Character: 玩家登陸後,創建的遊戲角色。
Scenario:                 遊戲場景。
UserInfo: 數據庫記錄的用戶信息。
BaseClientInfo: GateServer記錄的單個客戶端的信息
BaseCharacterInfo:   GameServer和數據庫中紀錄的單個角色的信息,記錄角色的基本信
                                 息,所有產品通用,character每次離開遊戲世界,都需要在數據庫中更新。
ClientID:                  等同於ConnectionID,在GateServer上相對於一個連接好的遊戲客戶端。
GlobalClientID:         全局ClientID,在數據庫中記錄的當前在線的全部的Client。

4.2.1 通信平臺GateServer的設計框架與特點

  遊戲通信平臺GateServer作爲網絡遊戲數據交互的接口,應該是一個高性能的服務器底
層通信模型,所謂的“高性能”,我想不外乎兩個方面:

1、處理的併發請求要儘可能地多,具體表現爲同一時間內同時連接的客戶端數量;    
2、數據包的吞吐量要儘可能地大,具體表現爲單位時間內服務器的收、發數據量。

  它採用Winsocket網絡編程實現玩家與遊戲服務器的通信,其技術核心是利用Socket
和消息隊列構建[9]。在充分考慮“性能”和“可擴展性”兩者兼顧的情況下,我們將遊戲通信平
臺GateServer分爲網絡底層和網絡中層服務兩層結構。網絡底層負責客戶端和應用服務器之
間數據的接收和發送,網絡中層完成客戶數據請求,並將結果返回給網絡底層,由網絡底層
與客戶端應用程序進行交互。

  遊戲通信平臺的優勢表現在支持所有主要網絡拓撲結構,支持多協議(TCP等),並且具
有統一、簡單的接口和開發模式。其主要特點有:

    (1) 實現了合理的負載平衡。設計再好的服務器程序,其單個程序所能承載的同時訪
問量也是有限的,面對一個龐大且日益增長的網絡用戶羣,如何讓我們的架構能適應未來海
量用戶訪問,這自然就牽涉到了負載均衡問題。GateServer技術的廣泛運用對服務器的執
行效率有非常顯著的提高。
  通過動態場景加載實現負載平衡:i.場景的加載和關閉必須由GateServer統一處理,在
整個遊戲世界啓動時,GateServer根據缺省的場景配置表,來分配每個GameServer所啓動
的場景數量和場景號;ii.在遊戲世界運行過程中,如果發現某個GameServer負載過重,則
選擇一個負載較輕的GameServer分擔負載過重的GameServer上的某些場景;iii.負載過重的
定義,暫時僅僅和連接的客戶端數量相關。

   (2) 統一各種業務之間的模式差別:網絡遊戲的發展是集羣的分佈式架構,以實現百萬
級以上的大型在線系統,因此,就需要屏蔽各種業務系統實現模式之間的差別——通過通信
平臺GameServer的靈活的業務請求路由功能,對客戶機而言屏蔽了處理業務請求的應用服
務器以及其後的數據庫服務器的物理位置和邏輯結構。這樣無論一個業務處理系統是採用分
布模式、部分集中模式、還是集中模式實現的,客戶端請求都會被業務通信平臺路由到合適
的服務器去處理並將結果返回給客戶端,客戶端程序和用戶都不必關心具體的實現模式。而
且,即使是後端的實現模式發生了變化,客戶端程序和用戶也都不會感覺到。 
  同時,通過通信平臺GameServe實現互聯互通,能夠合理的設置計費點,保證計費的準
確性,實現業務鑑權和業務過濾的功能,保證網絡的安全,也能夠通過對業務流量的監視和
控制,防止網絡風暴的發生。

   (3) 效率和響應速度:我們設計的通信平臺GameServer是高效的,通過把GateServer分
爲網絡底層和網絡中層服務兩層結構來提高通信的效率和響應速度,通過設計儘可能少的數
據包頭字節來減少帶寬資源的佔用率。

   (4) 一個開放的、標準的接口:爲了適應不斷變化的市場的需要,更爲了實現開放式的
體系結構,便於靈活地擴展或改造系統,我們遊戲通信平臺的設計思想是各應用子系統模塊
間都通過一個開放的、標準的接口來進行通信,通信底層和框架本身是松耦合的,通信底層
的實現沒有任何限制,可以很容易使用其它框架的優秀成果。通信平臺其作用類似計算機的
總線插槽。通過遊戲通信平臺的這個總線,對需要業務通信的各種後端和前端的應用模塊,
都可以用類似“即插即用”的方式“插入”到總線中以對系統進行擴展,如圖4.3所示。這種體
繫結構設計保證了系統的模塊化、開放性、和易擴展性。

圖4.3 一個開放的、標準接口的通信平臺


  (5) 安全性:通信平臺作爲網絡遊戲通訊的神經中樞,安全性不容忽視,採用DES加密
通信數據[7], 同時對客戶端連接進行安全性檢查,採用的方式如下:
    i.身份驗證,登陸到GateServer時需檢驗玩家的用戶名和密碼,如身份驗證失敗,禁止
發送後續指令,並且規定時間內斷開與其連接,並記錄IP。
  ii.在對應的階段內收到列表4.1以外的數據都認爲是非法數據,需要斷開連接,並記錄
IP。
     
     表4.1 各階段內的數據指令

  iii.客戶端的發送網絡包的節奏不能超過每秒一次,邏輯包不能超過2次。客戶端發包頻
率過快將被認爲是惡意攻擊,需要斷開連接,並記錄IP。

  (6) 優先級:按數據包定義的優先級能夠優先處理優先級高的應用數據。

4.2.2 通信平臺GateServer網絡底層

網絡底層的功能
1、有客戶端連接時的處理接口;
2、客戶端斷開時的處理接口;
3、從客戶端收完數據後的處理接口;
4、向客戶端發送完數據後的處理接口;
5、網絡通信及服務器處理出現錯誤時的處理接口。

網絡底層結構
  GateServer底層包括一個連接池和接收盒。連接池ConnectionPool就相當於一個容器,
管理着與每個客戶端對應的連接和發送鏈表;接收鏈表RecvBox互責管理接收的數據,它的
數量決定了接收隊列的數量。網絡底層結構圖如4.4所示。

圖4.4 網絡底層結構


接收和發送
1) PushToSend() 打包不發送,SendBuffer加滿後加入發送列表。
      PushAndSendUntilFull()打包,SendBuffer加滿後,直接發送。
2) SendNow()調用發送線程,發送當前的發送列表。如果SendBuffer中有待發數據,也同時發送。
3) 接收線程,在收到一個網絡包之後,調用ReceiveANetPack分檢,並把邏輯包(中層包)加入到對應的RecvBox的接收鏈表中。
4) 應用程序要定義自己的接收處理線程(m_ahRecvWorkerProc)來完成接收處理

涉及的類
1) CConnectPoint:基類,創建、處理接收鏈表RecvBox。
2) CNetServer:CConnectPoint的子類,i.創建、管理連接池connetionpool;ii.偵聽、接受連接,並對連接請求進行安全性檢驗。
3) CNetClient:CConnectPoint的子類,創建、管理連接。
4) CNetClientCompletionPort(用Socket接收發送的NetClient)
5) CConnectionPool:用於NetServer對連接的管理,包括:i.添加、刪除連接;ii.獲得連接指針;iii.遍歷連接。
6) CConnection:用於數據的打包發送,聯接的維持,包括:i.打包發送,邏輯數據通過PushToSend()打包,只有在調用SendNow()的時候纔會全部發送;ii.連接的維
持, 連接用心跳來維持,如果長時間沒有心跳,則連接斷開(不再接收發送)。

基本繼承結構

圖4.5 網絡底層類關係


接收隊列和接收線程
  RecvBox的數量決定了接收隊列的數量,對於一般500-1000個連接應該設置一個單獨
的接收隊列。每個接收隊列應該創建單獨的接收處理線程,在這個接收隊列上工作。

4.2.3 通信平臺GateServer網絡中層

網絡中層要實現的目標
  要用一組服務器支持一個5000-10000個玩家(player)連接的遊戲世界。

網絡中層的功能
1) 玩家登陸、登出
2) 數據在Client和GameServer之間的接收和轉發
3) 玩家場景位置記錄和轉移管理
4) GameServer的啓動和場景加載管理
5) GameServer的負載均衡(動態、靜態)

網絡中層結構:
  GateServer分爲兩個連接(Connection)組,分別負責管理一組面向GameServer的連接
和一組面向客戶端的連接。網絡中層結構圖如4.6所示。

圖4.6 網絡中層結構


涉及的類
CGateServer          管理兩個連接組
CClientLocationTable   客戶端/場景對應表 
CScenarioLocationTable 場景/遊戲服務器對應表

4.2.4 網絡通信平臺GateServer的接口設計

  提供豐富的API接口對於不同需求的企業級系統來說至關重要,統一的標準的接口可以
爲不同軟件開發商提供的不同應用。總體上講,主要是要從兩個方面去考慮這一問題。一方
面是在系統實施的過程中,要考慮系統的穩定、可靠地過渡;另一方面是要考慮在系統完成
之後,系統是一個有機的整體,每一個接口明確,易於維護,易於擴充,更加規範化。最終
的目標是接口的完全規範管理,這一點非常重要,是決定系統是否成功的一個重要因素。

  接口設計是整個系統實施的一個重要環節,是一個細緻而且複雜的工作。首先必須對現
有接口系統進行全面的瞭解,進行整理、規劃工作;然後才能在此基礎之上進行設計,設計
的目標是要符合營業部全集中的需求。

  GateServer對外接口全部採用標準TCP協議[39]。豐富的API接口,可以方便進行二次
開發,而且不依賴具體網絡環境,從點對點、一點對多點到多點對多點的模式都能適用。
GateServer的接口分爲客戶端和服務端接口,如表4.2所示:

  表4.2 主要接口描述

客戶端接口:

Init                      系統初始化
Destroy                釋放系統資源
Connected            建立與通訊服務器的連接
DisConnected       關閉與通訊服務器的連接
PushToSend         把數據打包加入發送鏈表,等待發送
SendNow             發送發送鏈表的數據包
RecvToBuf           接收數據,並加入到接收鏈表
IsConnected         檢查網絡連接狀態
GetStatus             獲取客戶端所處的狀態
GetConnectionID  獲取客戶端連接的ID號

服務端接口:
Init                                      系統初始化,創建日誌
Destroy                                釋放資源
Add                                     增加一個客戶端連接到連接池
SecurityCheck                      對一個客戶端連接進行安全性檢查
RemoveConnection               根據ID從連接池中移走一個客戶端連接
GetConnection                      根據ID從連接池中得到一個客戶端連接
GetConnectedNumber           得到客戶端連接的數目
GetTotalConnectionNumber   得到連接池最大連接數
DisConnectedAll                   斷開連接池中所有的連接
SetSendChainOpt                  設置發送隊列超長選項
PushToSend                         把數據打包加入發送鏈表,等待發送
SendNow                             發送發送鏈表的數據包
RecvToBuf                           接收數據,並加入到接收鏈表

4.3 統一格式的通信數據包

  關於如何建立服務器和客戶端的聯繫規則,也就是服務器和客戶端的遊戲協議部分。首
先解釋一下這裏協議的概念,協議大家都瞭解是一種通信規則,例如:TCP/IP,UDP等等,
這些是我們在網絡通信過程中所處理使用的協議。而我們這裏的協議是我們的遊戲服務器和
客戶端的通信規則。簡而言之,也就是客戶端發送到服務器的數據包和服務器發送的數據包
雙方解釋規則。下面具體介紹這種協議的建立和處理。

4.3.1 通信包的設計

  爲方便以下的討論,先明確兩個概念: 

  1、邏輯包:指的是在應用層提交的數據包,一個完整的邏輯包可以表示一個確切的邏
輯意義。比如登錄包,它裏面就可以含有用戶名字段和密碼字段。儘管它看上去也是一段緩
衝區數據,但這個緩衝區裏的各個區間是代表一定的邏輯意義的。
  2、物理包:指的是使用recv(recvfrom)或wsarecv(wsarecvfrom)從網絡底層接收到的數
據包,這樣收到的一個數據包,能不能表示一個完整的邏輯意義,要取決於它是通過UDP
類的“數據報協議”發的包還是通過TCP類的“流協議”發的包。

  我們知道,TCP是流協議,“流協議”與“數據報協議”的不同點在於:“數據報協議”中的
一個網絡包本身就是一個完整的邏輯包,也就是說,在應用層使用sendto發送了一個邏輯包
之後,在接收端通過recvfrom接收到的就是剛纔使用sendto發送的那個邏輯包,這個包不
會被分開發送,也不會與其它的包放在一起發送。但對於TCP而言,TCP會根據網絡狀況
和neagle算法,或者將一個邏輯包單獨發送,或者將一個邏輯包分成若干次發送,或者會將
若干個邏輯包合在一起發送出去。正因爲TCP在邏輯包處理方面的這種粘合性,要求我們
在作基於TCP的應用時,一般都要編寫相應的拼包、解包代碼。

  因此,基於TCP的上層應用,一般都要定義自己的包格式。TCP的封包定義中,除了
具體的數據內容所代表的邏輯意義之外,第一步就是要確定以何種方式表示當前包的開始和
結束。通常情況下,表示一個TCP邏輯包的開始和結束有兩種方式:

  1.以特殊的開始和結束標誌表示,比如FF00表示開始,00FF表示結束。
  2.直接以包長度來表示。比如可以用第一個字節表示包總長度,如果覺得這樣的話包
比較小,也可以用兩個字節表示包長度。

  通過上面的分析討論,網絡遊戲的邏輯數據包是遊戲數據通訊的最基本單位,但爲了提
高傳輸效率,減少網絡帶寬的佔有率,降低發送數據包的頻率,我們採用的方式是先把發送
的邏輯數據包組合成一個網絡包,添加到發送鏈表中,然後等待發送。

  因此,網絡遊戲通信的數據包是網絡包,具有一個確切的邏輯意義的數據包是邏輯包,
通信包結構如圖4.7所示:

圖4.7 通信包結構


  1.網絡包(底層包,PACK_, 頭結構:PACK_HEADER):把需要發送的數據(邏輯包)
組合成網絡包,加入發送鏈表,等待發送函數SendNow(),發送所有在發送連表的網絡包。

  網絡包的結構:
   1) PACK_HEADER:包頭,網絡包的實際大小&邏輯包數量
   2) nSize :第一個邏輯包大小
   3) data  :第一個邏輯包數據
   4) nSize :第2個邏輯包大小
   5) data  :第2個邏輯包數據
   6) ......

  網絡包頭的定義: 
  Struct  PACK_HEADER
  {
   WORD m_type;                 //包類型
   WORD m_nPackSize;    //網絡包的實際大小
   WORD m_nNumberLogicalPack;  //邏輯包數量
   PACK_HEADER()
   {
   m_type = NPT_DATA;
   m_nPackSize = 0;
   m_nNumberLogicalPack = 0;
   }
  };

  2.邏輯包(中層包,MPACK_, 頭結構:MPACK_HEADER):接收線程把所有接到的
網絡包,分拆成邏輯包,加入接收連表。

  邏輯包類型,邏輯包分爲兩種類型:
1) 數據包(轉發包)由GateServer進行轉發:從GameServer到GateServer,從Client到
GateServer。
2) 指令(這裏僅僅給出幾個例子)如表4.3所示。


表4.3 部分指令說明

  邏輯包頭的定義:
  Struct  MPACK_HEADER
  {
   WORD m_type; //類型
   WORD m_nPackSize; //包大小
   DWORD m_nID; //包序列ID
   WORD m_nConnectionID; //對應的連接ID號 
   DWORD m_nAuthID; //連接認證ID
   WORD m_aPara[4]; //指令
   MPACK_HEADER(){
   m_type = MPT_DATA;
   m_nPackSize = sizeof(MPACK_HEADER);
   m_nID = 0;
   m_nConnectionID = 0;
   m_nAuthID = 0;
   }
  };

4.3.2 通信包的通信控制

  由於網絡遊戲一般用字節流的方式來進行數據傳輸,接受到的一個數據包可能就不是一
條消息指令。在遊戲進行中,服務器和客戶端會不停的發送和接收數據包,發送時需要進行
封裝邏輯包,組合網絡包,接收時需要拼網絡包,拆分網絡包成邏輯包,然後解析邏輯包轉
換爲真正所要表達的指令意義並執行。
  由於計算機不懂得如何表達玩家之間的交流,因此我們需要提供一套可讓計算機瞭解的
指令組織和解析機制,也就是對我們上面提到的網絡數據包(數據封包)的處理機制。
  對於遊戲通信包的最廣泛的應用來說,就是指令操作和數據轉發,其數據流、指令流示
意圖如圖4.8所示。

圖4.8 數據流、指令流示意圖


  對於通信包的處理過程採用如下的集中設計方式:

  對於請求的處理和返回分開處理。當通信平臺GateServer收到一個請求包(網絡包)的時
候,開始進行解包,拆成一個個有實際意義的邏輯包,然後把邏輯包添加發送鏈表中等待發
送給遊戲服務器GameServer,GameServer收到一個邏輯包後,根據邏輯規則對請求進行處
理,並且將處理後產生的返回數據生成數據包添加到返回發送鏈表中,當生成到一定數量,
返回數據包被髮送給GateServer,然後由GateServer轉發給客戶端,得到處理的結果。這就
是請求和返回分開處理的模式,如圖4.9所示:
   
圖4.9 通信包的流程


  從上圖可以看出,實際上,遊戲規則模塊和遊戲管理模塊被合併在一起了,也就是說,
這兩個模塊之間不需要消息傳遞,他們只是簡單的函數調用關係。
  規則判定要做的主要工作就是辨別消息,把我們的消息翻譯成對對象的處理方式。
  我們的遊戲世界是有很多對象構成的,一個對象同時也可以攜帶多個對象,對象也可以
不斷增加、擴充。每當我們添加或擴充一個新對象,我們可以把它include進來,再在規則
模塊里加入對他的方法調用。

4.4 多線程實現

  在多線程應用程序中,爲了便於對多個線程進行維護,將多個線程封爲線程池類(Thread 
Pool)。在網絡遊戲設計中,由於大量的用戶參與遊戲,所以在服務器端必須使用多個線程
進行網絡接收,發送、處理數據包等操作。線程池類主要用來建立,結束、分配工作線程的
工作等任務。

    基本概念

    線程池類主要用來建立,結束、分配工作線程的工作等任務。線程池類相當於一個容器,
在容器中運行很多個線程,應用程序只需要將工作交給線程池,線程池負責協調和分配內部
工作。線程池對外界屏蔽了內部線程的運行,線程池對外界相當於一個黑盒子整體部分。
    在線程池類彙總,線程數量有臨界值線程數、當前存在線程數、當前工作線程數、最大
線程數等參數。最大線程數指的是當前線程池中允許存在的最大線程數;當有任務來時,如
果當前線程都在工作並且線程數量未達到最大線程數量時,則創建新線程;如果己經達到最
大線程數量時,則新任務必須等待,等待有線程空閒才能提供服務。
    當前線程數時指當前線程中存在的線程數量。當前工作線程是指當前正在工作的線程數
量。
    線程函數
    線程函數必須聲明未UNIT類型返回值,線程函數爲程序中的全部函數,在線程池的生
成新線程部分調用啓動。

    運行步驟如下:
    1)首先判斷線程池指針,如果線程池指針爲空,表示線程池已經銷燬,則線程函數直接
退出。
    2)取得當前的線程ID,然後根據當前的現成1D取得線程的詳細信息結構,如果爲空直
接退出。
    3)聲明事件數組,用於接收線程池分配工作的事件。
    4)在While死循環彙總,調用WaitForMultipleObjects()函數,使用無限等待事件的參數來
等待事件態。
    5)判斷事件態的數組位置,如果推出,則線程直接退出:否則表示線程池開始給分配工作,
則線程開始工作。取得工作隊列中的數據,進行處理。
    6)繼續循環((4)步,重複等待。

服務線程池框架

    服務線程池由管理線程池,接收線程池、分析線程池、發送線程池構成。管理線程池用
於管理接收、發送、分析線程池、包括啓動、停止和增加臨界線程池。接收線程池用於處理
客戶端連接請求,ACCEPT請求、接收客戶端數據。發送線程池用於處理髮送數據。分析線
程池用於分析客戶端輸入數據,同時維護後臺遊戲邏輯,處理用戶輸入指令,管理員命令等。
    其中,接收現成池負責接收客戶端數據,由於同時有多哥客戶端連接服務器,所以採用
完成斷口方式處理連接;接收線程接收到的數據按照數據格式定義後放到接收隊列中。分析
線程從接收隊列中取出數據進行分析,根據數據中的操作代碼進行處理,然後與後臺運行的
遊戲邏輯進行交互;接受這將需要發送數據放到發送隊列中,發送線程池負責將發送隊列中
的數據發送給客戶端程序。由於接收線程池、分析線程池、發送線程池之間都是相互獨立的
線程,所以再實際應用中不會出現由於某隔部分阻塞而導致程序掛起的情況,有效的提高了
服務器的負載功能。

管理線程池類

    管理線程池主要負責啓動和終止接收線程池、發送線程池、分析線程池,同時負責增加
和減少線程池中的臨界線程數。管理線程池類在程序中負責管理程序中的線程部分。

接收線程池類
    接收線程池主要用於處理接收客戶端傳輸數據,由於同時有大量客戶端連接,所以必須
同時建立很多SOCKET連接。該類是從CDPThreadModel類派生出來的。

發送線程池
    發送線程池主要用於將服務器數據發送給客戶端程序,同時由於需要發送給大量客戶
端,所以地洞多個現成同時進行發送。

分析線程池
  分析線程池是用來維護分析線程的容器,其基本結構與發送和接收線程池相似。該類是
從CDPTreadmodel類派生而來的。

 

第五章 網絡遊戲平臺的總體設計



5.1 平臺設計目標

  網絡遊戲平臺系統是爲大型網絡遊戲提供一套通用的,網絡引擎(NFX,Gateserver),
用戶管理系統,遊戲角色存儲管理系統,計費系統,運行時版本控制系統,運行時服務管理
控制系統,基本巫師管理系統,統計分析系統等等組合而成的統一平臺。

  平臺系統構建原則:

  · 開放性:系統設計採用國際標準,具有開放式體系架構,便於將來的系統平滑升級。
· 兼顧實用性與先進性:採用產品技術必須成熟、可靠,並且具有一定的先進性,既滿
足系統目前的運行要求,又能適應未來一段時間內業務增長的需要。

  · 可靠性:整個網絡系統應具有很高的安全可靠性,滿足7x24x360連續運行的需求。
· 可擴展性:在基於業界標準技術的基礎上,系統能夠隨着信息技術的進步不斷實現升
級,並且有很強的擴展空間以滿足業務不斷增長的需要。
  · 良好的性價比:應具備良好的性價比。
  
相關名詞解釋:

MainDB 核心數據庫,包括,userdb和gamedb.
BillingService 計費服務程序
DBI 數據庫前端接口,與Gateserver監控服務器
DBIManager DBI控制客戶端
ES 入口服務器
LS 列表服務器
GateServer                 戰區接入服務器
GameServer 遊戲場景服務器
FDB 角色存盤服務器
FDBI 角色存盤接口
SQLDBI 數據庫應用存取接口(尚未開發)
ServerMangaerSystem   服務器管理器,監控整個系統的服務器軟硬件情況,服務起停控制等
ResourceControlCenter  平臺資源管理控制中心,包括對人員,硬件,服務模塊的統一註冊,歸檔管理系統
CGIServer                    第三方合作接口
WebAccount    用戶註冊與充值系統
WebAdmin                   平臺配置管理webpm和GM,webgm管理系統
GMTools   基本功能的實時控制gm管理工具集,目前直接接入GateServer
Webstatics web            統計系統,包括實時統計系統和非實時統計分析系統
Play 初始啓動程序,檢測shell版本,解析ls
Shell 列取戰區和遊戲客戶端版本控制
Update 自動下載和解壓程序,支持ftp主動被動模式,支持http下載
GameClient 遊戲客戶端,由具體的遊戲提供,例如天驕II

5.2 平臺架構設計

5.2.1 平臺開發運行環境

  1.網絡環境需求

  (1)中心網絡節點:中心網絡節點是全部戰區的數據交換中樞,其互聯互通的穩定與
暢通對整個戰區穩定運行起着至關重要的作用。因此,建議在中心節點選用互連互通性好、
網絡穩定、能提供Cisco核心交換機及200M以上的獨享帶寬的機房。
  (2)戰區節點:戰區節點是各戰區的服務器與中心節點之間的數據通道,其網絡的穩
定和暢通情況直接影響到該節點所有的戰區。因此,建議在選擇該類節點機方時,要測試節
點的互通情況,及機房是否能提供100M以上的獨享帶寬。

  2.硬件系統需求

  (1)主數據庫(DB)服務器:作爲核心運行的數據庫,其高性能、穩定性、安全性是
其選購時要着重考慮的,因此選購的數據庫服務器一定要擁有很高的數據吞吐能力。另外,
必要的安全措施(如Raid5技術的支持)也是保障核心數據庫服務安全運行的前提。具體
的配置要求、規格如表5.1所示。

  表5.1 主數據庫服務器配置要求及規格
=================================================
配置要求                        規格
Chassis                             2U
CPU                                  Xeon 2.8GHz以上(兩顆)
Memory                             1G~2G
HD                                    5*73G(SCSI Raid5+JBOD*2)
Raid Card                            Ultra 320 Raid Card
Network                             Intel Pro 1000*2
================================================= 

 (2)戰區服務器
   戰區服務器分爲:GateServer、GameServer和FDBI服務器。根據應用的不同,其配置也
不同。網關服務器GateServer由於網絡壓力較大,因此,該服務器需要很強的網絡傳輸能力。
遊戲服務器GameServer,對於CPU、內存的要求較高,因此,GateServer和GameServer服
務器在選型時,一定要滿足前面提到的相關要求。FDBI服務器,主要用來存放玩家存檔和
Log日誌,因此,對於存儲空間的要求比較高,所以選型時,要儘量選擇大容量磁盤。具體
的配置要求、規格如表5.2和表5.3所示。

表5.2 遊戲世界服務器配置要求及規格
===============================================
配置要求                          規格
Chassis                              1U
CPU                                  Xeon 2.8GHz以上(兩顆)
Memory                            1G
HD                                    73G(SCSI)
Network                             Intel Pro 1000*2
===============================================

表5.3 FDBI服務器配置要求及規格
===============================================
配置要求                             規格
Chassis                                 1U
CPU                                      Xeon 2.8GHz以上(兩顆)
Memory                                 1G
HD                                        2*73G(SCSI)
Network                                Intel Pro 1000*2
===============================================  

遊戲世界服務器適用範圍很廣,不僅遊戲世界中的GateServer和GameServer可用,
ListServer、EnterServer、還費服務、DBI服務等也同樣適用。

  (3)存盤節點服務器:存盤節點服務器作用是在各節點機房備份該節點機房內所有戰
區的存盤文件和遊戲日誌文件,併爲運營工具查詢所使用。因此,該服務器要求一定要穩定,
且具有大容量的存儲空間。建議配置Raid5(可選)。具體的配置要求、規格如表5.4所示。

表5.4 存盤節點服務器配置要求及規格
=============================================
配置要求                             規格
Chassis                                1U
CPU                                    Xeon 2.8 GHz以上(兩顆)
Memory                               1G
HD                                      3*73G(SCSI)
Network                               Intel Pro 1000*2
=============================================
  
  (4)數據備份服務器:數據庫備份服務器的作用是用來備份所有數據庫的數據文件的
設備,該服務器可在主數據庫服務器出現問題時,快速恢復戰區運行,將損失降到最小。因
此,在選擇這款服務器時,穩定和大容量是考慮的關鍵。具體的配置要求、規格如表5.5所
示。
  
表5.5 數據備份服務器配置要求及規格
==============================================
配置要求                            規格
Chassis                                4U
CPU                                    P4 2.8GHz以上
Memory                              512M~1G
HD                                       5*73G(IDE Raid)
Raid Card                             3ware Raid card
Network                               Intel Pro 1000*2
==============================================

  3.軟件系統需求

  (1)WindowsServer2003企業版+SP1
  (2)MS SQL Server 2000+SQLSP4
  (3)Red Hat Linux AS 4.0
  (4)IIS 6.0、.NET
  (5)Apache 1.3.33 + PHP 4.3.10
  (6)MySQL 4.0.20d

  其中,遊戲平臺的操作系統均爲WindowsServer2003 sp1,主DB使用MS SQL Server2000 
sp4,各個戰區數據庫使用Mysql 4.0.20d,網站採用IIS6.0及ASP.net,BBS採用RHLinuxAS4.0
及DISCUZ4.0,工具採用Apache1.3.33+php平臺。

  4.開發工具:C/S架構程序採用Visual C++ 6.0、.Net開發;數據庫的存取採用標準的
SQL語言開發;B/S架構程序採用PHP、ASPX開發;數據庫模型設計採用Sybase公司的
Power Designer工具[8]。

5.2.2 四層C/S體系架構

  網絡遊戲是一個典型的實時聯機交互系統,我們選擇了目前比較成熟穩定的體系架構─
─多層C/S體系架構,其結構模型如圖5.1所示。

圖5.1 平臺體系架構總體設計


  (1)表示層:是本平臺的用戶接口部分,它擔負着用戶與應用間的對話功能。表示層檢
查用戶從鍵盤或其它終端設備上輸入的數據,接收應用服務輸出的數據。用戶輸入的數據通
過通訊平臺傳入功能層。
  (2)通信層:即通信服務器(GateServer),主要功能是,負責遊戲服務器(GameServer)
和客戶端(Client)之間數據交換的服務器,管理所有的玩家和遊戲服務器連接,並且負責
客戶端的登陸登出,記費校驗等工作。
  (3)功能層:實現網絡遊戲世界中的所有業務處理邏輯,而處理所需的數據是從表示層
或數據層取得的。在這一層的設計中,我們儘可能保持表示層和功能層之間的數據交換的簡
潔,避免進行一次業務處理,在表示層和功能層進行多次數據交換[42]。在功能層中包含有
確認用戶對應用和數據庫存取權限的功能,以及記錄系統處理日誌的功能。
  該層可分爲數據庫和遊戲服務模塊。遊戲服務模塊設計爲一個個單獨的子系統,即遊戲
的戰鬥系統、任務系統、尋路系統等等,用來處理遊戲世界中的業務。數據庫服務模塊是網
絡遊戲連接數據庫讀取玩家信息和戰區信息、存取玩家檔案的接口,並且肩負着監視戰區運
行狀態的任務,提供與數據庫連接管理、數據讀寫等功能。遊戲服務模塊實現具體的應用邏
輯。平臺的通信服務器收到玩家的操作請求後,轉換成對數據庫或遊戲服務模塊的請求,調
用服務模塊處理請求並將結果返回給通信服務器。
  (4)數據層:就是DBMS,負責管理對數據庫的讀寫。在本系統中,我們選擇了當前主
流的關係數據庫管理系統(RDBMS),這樣使用SQL語言將功能層的要求傳遞到數據層。中
心數據庫系統存放並處理所有玩家資料及其相應的數據,採用通用的大型關係數據庫系統。
從處理能力和容錯的角度考慮,硬件應該採用高可用性系統。

5.3 平臺網絡結構

  平臺從網絡結構上包括三個部分:系統服務模塊、受控安全模塊和啓動平臺模塊。平臺
系統的網絡部署結構如圖5.2所示。

圖5.2 系統網絡結構示意圖


  系統服務模塊包括數據庫MainDB、數據庫接口DBI、遊戲場景服務器GameServer、網
關服務器GateServer、列表服務器ES、入口服務器LS、角色存盤接口及存盤服務器FDBI、
第三方合作接口CGI和遊戲還費系統DFS。

  受控安全模塊包括DBI服務監控端、存盤服務器信息查詢工具、遊戲管理員工具、還
費系統監控、平臺配置系統和WEB服務(帳戶站、玩家論壇和遊戲官方網站)。

  啓動平臺模塊包括平臺初始啓動程序Play、列表程序Shell、遊戲客戶端GameClient和
下載工具。

5.4 平臺數據庫設計

  數據庫設計是信息系統的核心和基礎,它把網絡遊戲中大量的數據按一定的模型組織起
來,提供存儲,維護和檢索數據的功能,使信息系統可以方便、及時、準確的從數據庫中獲
得所需的信息。它的設計在很大程度上決定應用程序的質量和成功與否,並關係着整個平臺
的功能和效率。本平臺作爲實際應用的項目,要進行大量的數據加工處理,才能產生用戶所
要的信息,因此,構造一個良好的、優化的數據庫是至關重要的。它必須能有效的存儲數據,
保證各項系統數據的完整性,準確性,共享性和安全性,並能滿足各種應用需求(信息要求
和處理要求)。

  根據網絡遊戲的邏輯功能要求,該系統數據庫系統主要包括遊戲數據庫GameDB、用戶
數據庫UserDB、遊戲日誌數據庫GameLogDB三個數據庫,所用數據庫使用SQL 
SERVRE2000編制而成[10] [11] [12]。

  其中GameDB主要處理遊戲業務邏輯,存儲遊戲內容相關的數據,像角色信息、戰區
配置信息等,同時也處理與角色相關的計費問題;GameLogDB主要處理LOG數據和外掛
數據,存儲外掛封停記錄、LOG數據,像外掛封停名單、封停LOG等;UserDB主要處理
玩家帳號信息和費用管理,存儲玩家帳號相關數據,像帳號信息、遊戲卡信息等。

  數據流程圖主要與數據打交道,既表示了數據之間的聯繫,數據的流動,數據的處理等。
然而,要對每個數據元素動態的,靜態的所有細節進行表達,就必須要用數據字典。數據字
典在系統開發的各階段都起着重要作用。系統中數據表相當複雜,下面對幾個常用數據庫表
做個簡要介紹:

  GameDB數據庫:

  T_Config:整個數據庫的基本配置信息,包括當前數據庫版本號、遊戲客戶端版本
號、戰區服務器版本號等,登錄次數限制也是在此表進行設置;
  T_ErrReturnVal:數據庫返回的錯誤代碼表,包括所有數據庫出現故障時報告的代
碼的錯誤說明信息;
  T_Group:戰區列表,其中的F_ID值是一個戰區的唯一標識代碼,在一個戰區的
整個生命週期裏都是固定不變的;
  T_Gate:戰區設置表,跟一個戰區的Gate服務器緊密相關;
  T_Gifts:玩家獎品數據表,在遊戲做活動發獎時就是在這個表裏發獎;
  T_GiftsType:獎品內型表;
  T_Role:玩家角色信息表;
  T_Version:設置客服端版本升級,這個一般是通過PM工具來設置的;
  T_GMActiveIP:GM權限IP限制表;
  T_GameAdmin:GM權限分配表;
  T_LoggedUser:當前在線的玩家信息表;
  GameLogDB數據庫:
  T_BlackListHistory:由於使用外掛被封停的玩家角色列表;
  T_BlackListLog:綠色戰區玩家角色使用什麼外掛的記錄表;
  T_BlackListNoBlockArea:非綠色戰區玩家使用外掛的記錄表;
  T_GMActiveLog:GM激活記錄表;
  UserDB數據庫:
  T_Card:待激活的遊戲實卡信息記錄表;
  T_CardRevoke:已經激活的遊戲實卡信息記錄表;
  T_CardType:遊戲卡類型表;
  T_FreeUserCard:待激活的遊戲卡信息;
  T_UserBaseInfo:用戶基本信息表,這是在用戶註冊時填入的數據;
  T_UserCardInfo:玩家遊戲卡基本信息;
    T_UserCore:玩家用戶信息表;
5.5 平臺功能模塊設計

  如上圖5.2所示,網絡遊戲平臺根據各模塊的依賴關係,整個系統大致可分爲三部分組
成:系統服務模塊、受控安全模塊和啓動平臺模塊。

5.5.1 系統服務模塊

  系統服務模塊就是一個完整遊戲世界的服務器集羣,在網絡遊戲中稱爲戰區
(ZoneGroup),一個戰區是由多臺具有不同服務功能的服務器組成的一個獨立的服務器羣,
服務器羣內的服務器功能有數據庫MainDB、網關服務器GateServer、遊戲服務器
GameServer、角色存盤接口及存盤服務器FDBI、列表服務器ListServer、入口服務器
EnterServer等。每組戰區服務器根據戰區人數的多少可以靈活的改變戰區的邏輯結構。
    其模塊邏輯結構圖如5.3所示。

圖5.3 系統服務模塊圖

  系統服務模塊各服務器功能描述如下:

  數據庫爲戰區提供了數據存儲的空間和數據操作的特定環境,在啓動戰區相關服務以
前,數據庫服務必須啓動並正常運行。
  DBI(數據庫接口,Gateserver邏輯管理接口)服務是戰區連接數據庫讀取玩家信息和
戰區信息的接口,並且肩負着監視戰區運行狀態的任務,如果DBI服務癱瘓,玩家將不能
登陸、計費或正常退出遊戲。
  GateServer(網關服務器,接入與轉發指令)可以看做是整個遊戲的網關,玩家和遊戲
世界的消息通過GateServer傳遞,並且由其判斷消息的正確性和過濾非法消息,負責客戶端
的登陸登出,記費校驗等工作。由於通過GateServer的消息量很大,目前爲止GateServer
的實際承受人數一般爲2000。
  GameServer遊戲場景服務器負責打開遊戲場景,並處理玩家在遊戲過程中的操作。目
前GameServer的實際承受人數在1000左右。
  FDBI(角色存盤接口及存盤服務)是角色存盤接口,能根據GameServer的需求存取玩
家檔案。目前FDBI服務器有另外一個作用,即Mysql服務器,Mysql用來存儲GameServer
的大多數數據,如幫派信息、玩家在遊戲中的活動記錄等。這是整個遊戲世界的核心部分,
其數據需要重點保護。
  EnterServer(入口服務)入口服務器負責引導shell尋找ListServer,具有分壓功能,能
自動尋找較閒置的ListServer,分擔玩家請求戰區列表的壓力。
  ListServer(列表服務)列表服務器是遊戲世界的入口,它的作用是從數據庫中讀取列
表信息,顯示戰區列表。維護人員可通過開關列表服務器或更改數據庫中的開關來控制玩家
登陸游戲。

5.5.2 受控安全模塊

  網絡遊戲平臺的特點有兩多,一是服務器多,並且分佈在全國各地;二是服務多,有數
據庫服務、web服務、平臺的DBI、Gate服務等。平臺管理員要管理這些服務器主機和起停
主機上的服務等一些繁瑣的工作,當服務器達到一定數量的時候,這些工作會變得龐大而且
容易出錯。並且對主機的資源狀態、性能和服務的負載等等情況都沒有很好的辦法獲得。所
以在這樣的情況下,就需要監控管理界面來完成實時監控和自動化操作。

  同時網絡遊戲平臺需要給玩家提供一個註冊、交流、帳戶操作的地方,給第三方提供開
展業務合作的接口。這些需求通過WEB來實現。

  受控安全模塊就包含這些功能,主要分爲WEB應用、管理和監控這兩個部分,下面將
具體功能描述如下: 

WEB應用部分

  WEB應用包括BBS,WWW,ACC,CGIServer等是提供給玩家或者第三方合作的接
口,玩家和公司可以通過BBS、WWW進行交流,可通過ACC操作自己的賬戶,第三方合
作夥伴可通過CGIServer開展業務。
管理和監控部分
  本網絡遊戲平臺通過管理工具對系統服務模塊進行配置及對遊戲進行管理,通過監視工
具來實時的監視系統運行的狀況,通過控制工具來對系統服務模塊進行操作,通過查詢工具
有目的對遊戲數據進行查詢。

   1、配置管理

   其主要功能包括:1)戰區配置管理:創建、刪除戰區,對整個戰區的參數配置;2)服
務器配置管理:創建、刪除服務器,對單一服務器的參數配置;3)用戶管理:創建、刪除
用戶,用戶的權限管理;4)日誌配置管理:操作日誌等。
   管理工具目前有WebPm,GMTools等。
1)WebPm
WebPm工具可通過對數據庫的操作實現添加或刪除戰區、添加或刪除GateServer的信
息,限制戰區可登陸人數、配置戰區的顯示狀態、控制戰區的開關,更改戰區的計費狀態,
配置自動下載等。
  2)GMTools
GMTools由遊戲管理員使用的用來管理遊戲的工具,具體包括Gm公告工具,踢人工
具等,其功能有遊戲內踢出玩家,發送線上公告等。

   2、監視

   其主要功能包括:1)服務器狀態:啓動、停止、暫停、警告、故障;2)服務器主機性
能:CPU、內存、網絡帶寬等;3)服務器負載:比如GateServer的連接客戶端數量以及與
上限的百分比等;4)服務器版本和持續運行時間;5)歷史數據及其曲線圖。
  監視工具目前有DBICortroller、DFSTools等。
  1)DBICortroller
  以聲音、圖形和文字化的形式監視遊戲平臺各部分的運行情況,包括登陸人數、遊戲中
在線人數、心跳等。
  戰區狀態可以通過四種形式察看,網絡圖、柱狀圖、列表圖、曲線圖。若GateServer
和GameServer的狀態正常則顯示爲綠色反之則顯示爲紅色。
      2)DFSTools
  負責監視扣費服務的運行情況。
  
    3、控制工具包括自動控制和手動控制。對平臺下所有服務,包括數據庫服務等進行操
作。
  自動控制:是指對戰區或者DBI的控制,因爲它們的起停要有一系列的相關前置控制
才能進行,所以用自動控制會形成一個批處理,把一系列控制動作封裝到一個動作裏面。
手動控制:是對單一的服務器起停等的控制。

    4、查詢工具:目前有FDBITools、PointQuary等。
FDBITools可通過Mysql數據庫查詢玩家的交易、等級、金錢、幫派等信息。可以查詢
活動結果,幫派人氣度等信息,對整個系統的正常運行起到一定的輔助作用。PointQuery是
通過數據庫直接查詢玩家消費狀態的工具,可以通過PointQuery瞭解遊戲內指定玩家的消
費狀態。

5.5.3 啓動平臺模塊

  遊戲啓動平臺是指啓動遊戲的一些客戶端和服務器程序其中包括啓動界面play、顯示列
表服務的界面shell、升級程序updatewizard、升級提示程序updateawoke、列表服務器LS、
入口服務器ES。主要有以下幾個功能:檢測遊戲客戶端版本、選擇遊戲服務器、身份驗證、
一些設置檢測功能等。客戶端與用戶交互,服務器主要對用戶業務邏輯的請求進行的實現以
及對處理的結果返回。根據網絡遊戲平臺的結構和特點,啓動平臺模塊的總體結構如圖5.4
所示。
    
   圖5.4 啓動平臺模塊的總體結構


  玩家使用play.exe連接EnterServer,由EnterServer通知shell啓動並連接ListServer,選
擇戰區登陸後由shell啓動GameClient去連接戰區的GateServer,完成進入遊戲的過程。
  啓動平臺模塊的主要流程如圖5.5所示: 
      
  圖5.5 啓動平臺模塊的主要流程-請點擊觀看

  1、用戶通過Play訪問EnterServer,由EnterServer通知Shell應該連接的ListServer。
  2、確定ListServer後,通過ListServer列取戰區列表
  3、選擇戰區後,Shell可獲得其ip和port,並進行版本升級控制,並引導玩家登錄。
  4、登錄成功後Shell將啓動遊戲客戶端GameClient
  5、GameClient根據參數連接GateServer並進入遊戲世界開始遊戲

5.6 平臺的容災機制

  容災備份是通過特定的容災機制,在各種災難損害發生後,仍然能夠最大限度地保障提
供正常應用服務的信息系統。
  容災備份可以分爲數據備份和應用備份。數據備份需要保證用戶數據的完整性、可靠性
和一致性。而對於提供實時服務的信息系統,用戶的服務請求在災難中可能會中斷,應用備
份卻能提供不間斷的應用服務,讓客戶的服務請求能夠繼續運行,保證信息系統提供的服務
完整、可靠、一致。
  數據備份是容災系統的基礎,也是容災系統能夠正常工作的保障;應用備份則是容災系
統的建設目標,它必須建立在可靠的數據備份的基礎之上,通過應用系統、網絡系統等各種
資源之間的良好協調來實現。
  災難恢復中心方案實施的成功與否,最關鍵的是數據的備份。在災難發生時,首先要保
證券商系統的數據安全;其次是儘快恢復系統正常運行,保證數據的安全就是要確保兩個地
方的數據的一致性。
  容災方案的基本設想是:生產環境的兩臺RS/6000服務器,組成一個本地的雙機熱備環
境,熱備份實現交易日誌雙機備份。當本地的一臺服務器發生故障時,應用會自動切換到本
地另外一臺服務器上。在備份地點,由一臺RS/6000服務器作爲備份服務器。當生產環境中
的兩臺服務器都不能工作時,災備中心的服務器自動啓動應用,恢復正常的生產環境。如圖
5.6所示:

圖5.6 系統的容災方案架構


  根據IBM公司SHARE 78標準,容災技術可以分爲7個層次,從無任何容災備份措施,
到將備份的磁帶存儲在異地,再到建立應用系統實時切換的異地容災備份中心,數據和應用
的恢復時間從數天到幾個小時甚至幾秒。
  一個完整的容災備份系統包括本地數據備份、遠程數據複製和異地備份中心。當然並不
是所有的企業都需要這樣一個系統,只有對不可中斷的關鍵業務纔有必要建立容災備份中
心。而小型企業通過建立NAS或SAN的離線數據備份和人爲的數據轉移就可以達到很好的
容災備份效果。

5.7 平臺的安全性設計

  近年來,網絡遊戲在國內蓬勃發展,呈現一片繁榮景象。然而網絡遊戲的安全也出現了
不少問題,非法攻擊造成服務器崩潰,多種非法外掛自動機,玩家的通信數據被非法破譯,
出現多起遊戲幣詐騙、盜取的案例等等,這些給網絡遊戲的發展極爲不利,給用戶帶來了損
失。這些都是嚴重的安全問題,也是一直困擾各大遊戲公司的安全問題,國內外衆多廠商和
公司都對網遊安全問題引起高度重視。

  安全性體現在系統設計的多個方面,如果根據其設計的類型我們分爲以下幾類:

  1. 網絡環境:安全屏障由一套周密部署的VPN系統組成的,統一管理登陸服務器的用
戶,記錄用戶登陸服務器的詳細信息,將所有服務器設置安全策略,限制只有VPN服務器
的IP地址纔可以登陸。用來阻止除VPN服務器以外的計算機登錄平臺。
  2. 法律上人爲規定製度:1)對非法外掛、帳號盜用提供投訴管理機制;2)對數據核
查,通過全面完整的日誌紀錄,平臺系統可以對業務、操作等進行覈查工作,及時發現管理
問題,保證系統安全。
  3. 數據安全與系統可靠性:1)在通信過程中,爲了保證數據安全,在各個環節的任何
兩點之間都採用DES對稱加密算法保護數據安全;2)對於像通訊平臺這種接入的關鍵節點,
對客戶端連接進行安全性檢查,驗證身份的有效合法性;3)在數據的存儲過程中,對於高
安全性數據,採用加密存儲的方式進行存儲,以最大程度地保證客戶交易的安全性和員工操
作的安全性;4)內置的雙機熱備份功能和建立專門的災備中心,保證系統可靠運行;應用
服務器、通訊服務器、數據服務器以集羣方式運行,保證系統不應單點故障失效。
  4. 權限管理:將對用戶、員工、遊戲管理員等所有對系統進行操作的權限,哪怕是查
詢權限都控制在總部。無論是數據操作,還是查詢返回結果,所有的權限檢查都在數據中心
的應用服務器進行,這樣就把權限控制真正地集中到數據中心。
  5. 統監控:通過全面完善的系統監控功能,包括:對網關服務器GameServer、數據庫
接口DBI、異常事件等等的實時監控,及時發現處理機和應用服務器故障,減少停機時間,
防止業務管理問題。

5.8 平臺的特點與可擴展性

  爲了保證用戶獲得最佳的遊戲體驗以及對平臺系統的實現、管理、維護等因素考慮,網
絡遊戲系統平臺具有一定的產品與技術特性和可擴展性,下面將簡單描述相關特點及可擴展
性的實現方式。

  1) 系統的特點 

  穩定性、可靠性。遊戲網關服務器GateServer、遊戲服務器GameServer、遊戲數據庫服
務器FDBI等。通過將GateServer/GameServer/FDBI等放到機櫃中,實現統一的管理和維護,
保證在線用戶的遊戲連貫、連續、不停頓運行。 
  強大的系統功能。系統設計採用分組的方式,用一臺FDBI、二臺GameServer、一臺
GateServer組成一個網絡組,用很多不同的小組分散開滿足前端的遊戲請求。這樣應付來自
前端的海量請求,對集中計算的一些工作,可以被分配到後端不同的小組中,這些小組共同
組成一個功能強大的系統平臺。而在每一個小組中,不同的服務器各司其職,前端的網關認
證服務器負責接入、經過負載均衡算法後把用戶引入到合適的遊戲服務器,遊戲服務器作爲
主要平臺,遊戲服務器作爲具體的工作平臺,後臺的數據庫服務器提供遊戲資源和數據、信
息支持,這樣可以更好的爲系統工作,最大限度地發揮設備的功能,滿足在線用戶的遊戲需
求。 

  系統的可擴展性和可維護性。每個組中的服務器在存儲能力、擴展能力上預留巨大空間,
這樣整個系統的擴展空間基本能夠滿足將來一段時間業務的海量增長需求。由於採用統一的
機櫃,通過統一的控制平臺,配合相關的系統管理功能,可以輕鬆實現對所有系統資源的管
理和維護。 
   另外,由於採用基於標準的技術和產品,如系統架構、網絡協議、硬件產品、遊戲軟
件等,系統將來的升級也很方便。 
   安全、管理方面。系統設置爲內、外網。外網主要實現與網絡上用戶的互連,提供一
個基礎的認證、遊戲平臺。內網則主要是對系統文件的管理、遊戲內容管理、用戶信息管理、
系統的維護,甚至是收費方面的管理和內部的信息化管理、自動化管理等。 
  通過外網接入的用戶,將根據地域、遊戲水平、各自的偏好等方面的因素,被引導到不
同的遊戲組別中,內網則對中間的遊戲平臺提供多方位的支持。
    
    2) 可擴展性

  可擴展性包括系統能夠隨着信息技術的進步不斷實現升級,並且有很強的擴展空間以滿
足業務不斷增長的需要,同時能方便地實現承受更高的同時在線人數的壓力。
  由於玩家數量的多少關係到一款網絡遊戲的成敗,因此平臺就要有可擴展的機制來滿足
越來越多的在線人數。解決這個問題的方式是通過戰區的擴展。
  戰區的擴展是指爲了能承受更高的同時在線人數的壓力,採用同時開放多個戰區或者改
變戰區的邏輯結構以提高承載人數的操作。戰區的邏輯結構是指組成戰區的不同功能的服務
器的數量。
  戰區的邏輯結構是由戰區所能承受的壓力決定的,即戰區的人數。具體數值如下:
  GateServer正常情況下最大能承受2000人的壓力。GameServer正常情況下最大能承受
800人左右的壓力。FDBI由於服務器壓力較小,使用了FDBI與MysqlServer安裝在同一臺
服務器上的結構。DBI由於壓力較小,採用8個戰區共用同一臺服務器的結構(使用不同的
端口和DBIID)。
  目前所採用的結構一般爲1GateServer+2GameServer+1FDBI,其可穩定運行的支持人數
爲1200人左右。如果需要增加人數,可根據人數的增加情況酌情增加GameServer和
GateServer服務器的數量。
  目前所採用的邏輯機構有:
  1GateServer+2GameServer+1FDBI;
  1GateServer+3GameServer+1FDBI; 
  1GateServer+4GameServer+1FDBI;
  2GateServer+4GameServer+1FDBI。
  其中2GateServer+4GameServer+1FDBI結構是爲了可以緩解戰區開始時大量玩家湧入所帶來的壓力。
  不同在線人數情況下的服務器需求,按照1GateServer+2GameServer+1FDB結構,服務器需求的數量如表5.6所示( 請點擊觀看):

5.6 不同在線人數情況下的服務器需求

服務名稱

服務器數量(單位:臺)

服務器配置

備      注

使用數量不受人數影響的服務器

主數據庫

3

主DB服務器

UserDB,GameDB,GameLogDB各一臺

官方網站

1

遊戲世界服務器

 

官方論壇

1

遊戲世界服務器

 

賬戶站

1

遊戲世界服務器

FDBI和MysqlServer共用一臺

LS和ES

1

遊戲世界服務器

ListServer和EnterServer可共用一臺服務器

還費服務

1

遊戲世界服務器

 

備份服務器

1

數據備份服務器

專門做數據備份使用

支持5000人同時在線

GateServer

3

遊戲世界服務器

 

GameServer

6

遊戲世界服務器

 

FDBI

3

角色存盤服務器

 

DBI

1

遊戲世界服務器

多個DBI服務可以共用一個DBI服務器,最多8個

存盤節點服務器

1

存盤節點服務器

控制工具及FDBITools使用,有備份數據的功能

支持10000人同時在線

GateServer

5

遊戲世界服務器

 

GameServer

10

遊戲世界服務器

 

FDBI

5

角色存盤服務器

 

DBI

1

遊戲世界服務器

多個DBI服務可以共用一個DBI服務器,最多8個

存盤節點服務器

1

存盤節點服務器

控制工具及FDBITools使用,有備份數據的功能

支持20000人同時在線

GateServer

10

遊戲世界服務器

 

GameServer

20

遊戲世界服務器

 

FDBI

10

角色存盤服務器

 

DBI

2

遊戲世界服務器

多個DBI服務可以共用一個DBI服務器,最多8個

存盤節點服務器

2

存盤節點服務器

控制工具及FDBITools使用,有備份數據的功能



遊戲服務器實現

6.1 總體框架

遊戲服務器GameServer需要處理的內容相當多,如網關服務器GateServer網絡數據的傳輸、玩家命令的解析、遊戲規則的實現等等。因此遊戲服務器需要分層來設計,一方面可以使整體結構清晰,另一方面方便多人編碼。

遊戲服務器GameServer可以分爲3層來設計,如圖6.1所示。最底層是網絡層,負責網絡數據的接收與發送。中間層是命令處理層,負責命令的接受、發送與解析。上層是最複雜的虛擬世界層,在這一層上,遊戲中的各種物體按既定的規則運行着,併發生交互關係。

6.1 遊戲服務器的層次

主要封裝了三個數據隊列及三類處理線程,介紹如下:

  1、接收數據包隊列及接收線程:用於存放剛收到的數據包,此數據包還沒有進行邏輯意義上的拆解,接收線程從此隊列中取出數據包,並將其形成一個邏輯意義上完整的數據包加入到“處理數據包隊列”中;

  2、處理數據包隊列及邏輯處理線程:已經拆解成了邏輯意義上的數據包,邏輯處理線程對此類數據包進行邏輯解析,這裏就是服務器的主要邏輯部分,有的數據包在處理完成後,可能是需要向網關服務器GateServer返回處理結果的,此時就需要邏輯線程在處理完成後將返回結果的數據包放入“發送數據包隊列”中;

3、發送數據包隊列及發送線程:待發送的數據包隊列,由發送線程根據數據包裏的套接字發送給GateServer,然後有GateServer轉發給特定的客戶端。

6.2 網絡層實現

主要功能:1接收網關服務器GateServer轉發過來的邏輯數據包,並添加到接收鏈表中等待命令處理層解析2發送處理後的數據到網關服務器GateServer

實現:遊戲服務器GameServer作爲客戶端程序與網關服務器GateSrver建立連接通信,調用GateServer客戶端接口。

客戶端主要包括的類如下:

1) CConnectPoint:基類,創建、處理接收鏈表RecvBox

2) CNetClientCompletionPort(Socket接收發送的NetClient)

3) CConnection:用於數據的打包發送,聯接的維持,包括:i.打包發送,邏輯數據通過PushToSend()打包,只有在調用SendNow()的時候纔會全部發送;ii.連接的維持,連接用心跳來維持,如果長時間沒有心跳,則連接斷開(不再接收發送)。

客戶端主要接口函數如下:

1) Init(const SOCKET&    socket, const sockaddr_in& addr, DWORD dwID, CConnectPoint * pCP, DWORD nAuthID)系統初始化

2) Destroy() 釋放系統資源

3) Connected() 建立與通訊服務器GateServer的連接

4) DisConnected() 關閉與通訊服務器GateServer的連接

5) PushToSend( void * pBuf, int nSize, WORD type, WORD * para = NULL)把數據打包加入發送鏈表,等待發送

6) SendNow() 發送發送鏈表的數據

7) RecvToBuf() 接收數據,並加入到接收鏈表

8) IsConnected() 檢查網絡連接狀態

6.3 命令處理層實現

主要功能:對於消息的處理解析,這裏首先就需要知道遊戲總共有哪些消息,所有的消息都有哪些,才能設計出比較合理的消息頭。一般來說,消息大概可分爲主角消息,場景消息,同步消息和界面消息四個部分。其中主角消息包括客戶端所控制的角色的所有動作,包括走路,跑步,戰鬥,交易等等之類的。場景消息包括天氣變化,一定的時間在場景裏出現一些東西等等之類的,這類消息的特點是所有消息的發起者都是服務器,廣播對象則是場景裏的所有玩家。而同步消息則是針對發起對象是某個玩家,經過服務器廣播給所有看得見他的玩家,該消息也是包括所有的動作,和主角消息不同的是該種消息是服務器廣播給客戶端的,而主角消息一般是客戶端主動發給服務器的。最後是界面消息,界面消息包括客戶端發給服務器、服務器發給客戶端的聊天消息和各種屬性及狀態信息等等。

對於服務器的命令解析層來說,需要解析客戶端發給服務器的消息,包括主角消息和界面消息,得到相應的遊戲邏輯命令,調用命令對應的虛擬世界層的處理模塊。

實現:類CServerMessageExplain負責解析邏輯數據包,得到相應消息的命令。

定義如下

classCServerMessageExplain

{

public:

     staticCServerMessageExplain* m_pServerMessageExplain;

public:

     CServerMessageExplain();

     ~CServerMessageExplain();

         //解析指令函數

     int Explain(char* pBuf, int nPackSize, CObject* pObject);

};

Explain函數的實現如下

intCServerMessageExplain::Explain(char* pBuf, int nPackSize, CObject* pObject )

{

     if( ! pBuf || (nPackSize<=0) )

              return -1;

     if( !pObject )

              return -1;

    

         HPACK_CLIENT_HEADER * pHeader = (HPACK_CLIENT_HEADER *)pBuf;

   

     switch( pHeader->m_aPara[0] )

     {

     case FMI_CTOS_ER_USEUIITEM: //使用技能/物品/表情

              {

            …

              }

              break;

     case FMI_CTOS_ER_ALLOT_ATTRIBPOINT: //交易系統:向服務器發送某個交易的動作

              {

                 

              }

              break;

     case FMI_CTOS_ER_CHAT:    // 聊天系統:客戶端向服務器發頻道開關信息

              {

                 

              }

              break;

case FMI_CTOS_ER_SET_MAKE_FRIEND_STATUS: //設置玩家的狀態(是否充許別人與他交友)

{

                 

              }

              break;

……

default:

              break;

     }//end switch()

     return 1;

}

6.4 虛擬世界層實現

在遊戲世界中存在許多物體,例如玩家(角色)、道具、NPC等等,正是由於這些物體之間的相互作用,構成了 一個豐富多彩的虛擬世界。因此,一個虛擬世界就是由許多物體對象和物體之間的關係(如場景管理、戰鬥系統、任務系統、玩家管理等等)組成的,其虛擬世界層結構如圖6.2所示。

6.2 虛擬世界層結構

如上圖所示,虛擬世界層的實現就是包括物體對象和物體對象間關係這兩部分。由於物體對象間關係的定義依賴於物體,因此物體對象的實現是虛擬世界的關鍵。下面將介紹物體對象的實現。

遊戲中的物體類主要實現以下功能:

1物體的統一創建與刪除

2物體的定時器

3物體的查找

整體結構圖如圖6.3所示。

6.3 物體類結構圖

物體基類的實現代碼如下:

// Object.h: interface for the CObject class.

#ifndef __COBJECT_H__

#define __COBJECT_H__

class CObject 

{

public:

      long GetObjectType();

      void SetObjectType(long type);

      void SetUniqueId(long id);

      long GetUniqueId();

      virtual void HeartBeat();

      CObject();

      virtual ~CObject();

private:

      long m_uid;                            // 物體ID

      long m_obType;           // 物體類型

};

#endif

// Object.cpp: implementation of the CObject class.

#include "Object.h"

CObject::CObject()

{

}

CObject::~CObject()

{

}

void CObject::HeartBeat()

{

}

// 取得物體的ID

long CObject::GetUniqueId()

{

      return m_uid;

}

// 設置物體的ID

void CObject::SetUniqueId(long id)

{

      m_uid = id;

}

// 設置物體的類型

void CObject::SetObjectType(long type)

{

      m_obType = type;

}

// 取得物體的類型

long CObject::GetObjectType()

{

      return m_obType;

}

有了物體的基類以後,就可以考慮整個遊戲世界的物體模型,一個簡單的模型如圖6.4所示。其中,玩家和NPC是從一個父類派生的。

6.4 物體對象模型

由於遊戲中的所有物體都從一個基類派生,所以可以對物體進行統一管理。首先進行的是物體的創建,根據不同的物體類型,創建不同的實例,並返回統一的CObject指針。代碼如下:

// 創建一個新物體

CObject *CMatrix::CreateObject(long type)

{

      CObject *ob = NULL;

      // 根據物體類型創建實例

      switch(type)

      {

               case OTYPE_ITEM:

                         ob = new CItem;

                         break;

               case OTYPE_HUMAN:

                         ob = new CHuman;

                         break;

      }

      if(ob)

      {

               // 設置ID

               ob->SetUniqueId(m_seq++);

               // 添加到物體列表中

               m_obList.push_back(ob);

      }

      return ob;

}

物體的銷燬也要使用統一的接口,避免內存泄露等問題,代碼如下:

// 銷燬一個物體

void CMatrix::DestroyObject(CObject *ob)

{

      // 從物體列表中清除

      m_obList.remove(ob);

      // 釋放內存

      delete ob;

}

提供查找物體的功能,代碼如下:

// 根據ID查找物體

CObject * CMatrix::FindObject(long uid)

{

      CObject *ob = NULL;

      list<CObject*>::iterator it;

      for(it = m_obList.begin(); it != m_obList.end();it++)

      {

               if((*it)->GetUniqueId() == uid)

               {

                         ob = (*it);

                         break;

               }

      }

      return ob;

}


第七章總結、展望與參考文獻

1.總結

隨着中國網絡遊戲產業的迅速發展,構建一個穩定、可靠、高效、可伸縮性的網絡遊戲平臺已經成爲網絡遊戲運營成敗的關鍵因素。

本文通過對應用平臺體系結構的分析,對網絡遊戲平臺應用開發的框架和技術難題進行研究,設計並實現了一個基於集羣技術的四層體系結構的網絡遊戲平臺,並對遊戲通信平臺GateServer、通信數據包、多線程等方面都做了較爲深入的研究,最後文章對平臺的遊戲服務器進行了實現。在平臺實現中所採用的集羣技術、通信中間件來實現分佈式結構的互連和數據傳輸,以及通信包設計、多線程技術、隊列技術和框架技術等方法都有較高的實用價值,網絡遊戲平臺的開發者有很好指導意義。

本課題研究已經用於實際的應用開發中,所開發的《天驕II》、《傲世online》、《鳳舞天驕》這三款網絡遊戲的平臺已經用於商業運營,實踐證明,採用該框架的網絡遊戲平臺可極大的提高開發效率,節省開發時間,取得了較好的經濟效益,同時通信平臺GateServer技術的廣泛運用對服務器的執行效率也有非常顯著的提高,實現了合理的負載平衡

2.展望

由於現在的一個遊戲世界(戰區)中所能容納的玩家在2000人左右,離實現真正的萬人在線,即同時在一個遊戲世界(戰區)還有很大的差距。這是由於通信平臺網關服務器GateServer這個瓶頸造成的,一個GateServer所能承受的客戶端連接數實際上就是一個戰區所能容納的人數,現在一個戰區只包含單個網關服務器GateServer。同時,由於一個戰區的所有玩家都是通過一個GateServer與服務器交互的,所以如果GateServer受攻擊或蕩機後,該戰區的所有玩家將不能繼續玩遊戲。爲了解決上述問題,我們必須實現一個戰區包含多個網關服務器GateServer,這樣既可以支持更多的客戶端連接,又可以解決當某個GateServer受攻擊或蕩機後,其它的GateServer扔然照常運行,和其它GateServer相連的客戶端仍然可正常玩遊戲。但多個GateServer的使用又涉及到玩家間的同步問題因此多網關服務器GateServer及相互之間通信技術的研究運用將會是我們要解決的問題,也是本論文的進一步工作。

參考文獻

[1] CG實驗室王鑫羅金海趙千里PC遊戲編程(網絡遊戲篇清華大學出版社,重慶大學出版社. 2003.8, P2-4.

[2] 子商務.《中國網絡遊戲的發展趨勢》. 2002.5, P68-70.

[3] 伶國平.《電子競技運動與網絡遊戲的區別》.

http://news.17173.com/content/2004-6-19/n814-730339.html

[4] 博客中國.《網絡遊戲歷史》http://www.blogchina.com/new/source/122.html

[5] 賽迪網《網絡協議TCP/IP, IPX,/SPX, NETBEUI簡介》.

http://www.edu.cn/20010830/210056.shtml

[6] 葉寧. Unix環境下利用Socket和消息隊列構建應用通信平臺網絡技術與資訊, 2002,vol.10 No.1185-88.

[7] 盧開澄計算機密碼學(2). 清華大學出版社. 1998

[8] 白尚旺. PowerDesigner軟件分析設計技術電子工業出版社. 2002

[9] 李文軍周曉聰李師賢中山大學計算機科學系講義_分佈式軟件體系結構中山大學計算機科學系. 2001

[10] 飛思科技產品研發中心. SQL SERVER2000速查電子工業出版社. P23-45.

[11] 陸昌輝數據庫開發與應用叢書(1)·SQL SERVER2000核心技術揭祕宇航出版社. 2002.6, P85-125.

[12] 彭東. SQL Server2000應用開發技術指南清華大學出版社:200-220.

[13] 上海艾瑞市場諮詢有限公司17173第五屆中國網絡遊戲市場調查報告. 2005

[14] 侯雲峯三層次Client/Server應用開發指南電子工業出版社. 2000

[15] 上海艾瑞市場諮詢有限公司中國網絡遊戲行業研究報告2004年簡版. 2004

[16] 陳智勇楊輝華蔡國永機羣計算中的負載共享策略[J]. 桂林電子工業學院學報, 2001, 21(4): 23—26.

[17] 陳志剛李登曾志文分佈式系統中動態負載均衡實現模型[j]. 中南工業大學學報, 2001, 32(6): 635639.

[18] 王曉川葉超羣金士堯一種基於分佈式凋度機制的集羣體系結構[J]. 計算機工程, 2002, 28(8): 232234.

[19] 趙水寧邵軍力web服務器負載均衡技術的研究[J]. 電信科學, 2001, (7): 6-8.

[20] 章文嵩. Linux服務器集羣系統()[DBOL]. http://www-900ibmcoradeveloperWorks/cn/linux/cluster/lvs/part4/in—dexShtml. 2002-05-10/2003-02-18

[21] 周天明汪文勇等. TCP/IP網絡原理與技術清華大學出版社1993

[22] 蘇羽王媛媛. Visual C++網絡遊戲建模與實現北京科海電子出版社. 2003

[23] 汪翔袁輝. Visual C++實踐與提高一網絡編程篇中國鐵道出版社. 2001

[24] 姚曉光等網絡遊戲開發機械工業出版社. 2004.6

[25] 李東. IBM金融行業災難恢復解決方案軟件世界, 2001(12)

[26] 李虎雄徐貫東張燕姑網絡遊戲數據平臺數據通訊的實現方案. 計算機工程與設計, 2005.11

[27] 梁健董德存基於IMS的遊戲平臺構架研究廣東通信技術, 2005.7

[28] 榮欽科技. Visual C++遊戲設計北京科海電子出版社.

[29] 榮欽科技遊戲設計概論北京科海電子出版社. 2003.6

[30] 楊青楊磊. 3D遊戲編程北京希望電子出版社. 2004.6

[31] 劉軍, 丁紅, 呂濤. Google集羣體系結構分析. 武漢化工學院學報, 2005.9

[32] 王曉川葉超羣金士堯一種基於分佈式調度機制的集羣體系結構計算工程, 2002.8

[33] []Alex Vrenios 馬朝暉.  Linux集羣體系結構機械工業出版社. 2003.1

[34] Andre Lamothe. Windows遊戲編程大師技巧中國電力出版社. 2001.11

[35] Andrew S.Tanenbaum 熊桂喜王小虎等譯李學農審.《計算機網絡》第3清華大學出版社. 1998.7

[36] []Cord Peter面向對象軟件構造清華大學出版社. 1999

[37] []Craig Larman姚書徵等譯. UML和模式運用-面向對象分析與設計導論機械工業出版社. 2002.1

[38] Dante Treglia張磊譯《遊戲編程精粹3人民郵電出版社. 2003.7

[39] Douglas E.Come. TCP/IP 網絡互連(1)原理協議和體系結構(4)(影印版). 人民郵電出版社. 2002

[40] Engelschall R SLoad balancing your web site practical approaches for distributing HTTP traffic[J]web Techniques Magazine1998(3)123128

[41] JC Mogul,H Frystyk, L Masinter et al. Hypertext Transfer Protocol HTTP/1.1 [S].

    RFC2616,1999

[42] Jesse Feiler. 前導工作室應用服務器設計開發與維護機械工業出版社. 2000

[43] Marc Saltzman. 遊戲軟件設計與開發大揭密清華大學出版社. 2000.9

[44] Michael J.Young. Visual C++從入門到精通電子工業出版社. 1999.1

[45] Richard Rouse III尤曉東等譯《遊戲設計一一原理與實踐》電子工業出版社.

2003. 10

[46] []Richard Rouse尤曉東等譯遊戲設計—原理與實現電子工業出版社. 2003.10

[47] Tim Parker. TCP/IP Unleashed機械工業出版社2000

[48] Tom Meigs. 頂級遊戲設計—構造遊戲世界電子工業出版社. 2004.5

[49] []Treglia D.張磊譯遊戲編程精髓3. 人民郵電出版社. 2003.7

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章