随笔-196  评论-37  文章-0  trackbacks-0

                                             计算机研究生开放研究
                             《基于多层结构的网络游戏平台的研究与应用》
                                             美国GeneChiu基金资助


基于多层结构的网络游戏平台的研究与应用
研 究 生:  匡  华                

基于多层结构的网络游戏平台的研究与应用

基于多层结构的网络游戏平台的研究与应用
学科专业:  计算机软件与理论
研究方向:  计算机软件
导    师:  李  祥 教授
研 究 生:  匡  华
中国 · 贵州 · 贵阳 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

pasting

posted on 2010-01-16 15:38 小王 阅读(4857) 评论(0)  编辑 收藏 引用 所属分类: 游戏服务器端开发

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理