`
sooxin
  • 浏览: 257189 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ACE框架在网络游戏服务器中的设计与应用

阅读更多

陶 道,万旺根
(上海大学 通信与信息工程学院 上海 200072)

随着计算机网络的发展,特别是因特网的出现,数字娱乐和网络游戏产业得到了蓬勃的发展,异军突起的网络游戏成为中国网络产业中的先锋。而由于信息技术的进步,计算机、手机以及不同的传媒终端等不断涌现,如何将这些众多不同的终端通过互联网进行互联互动成为一大技术难点,而这些难点的突破取决于网络游戏服务器的开发。目前在各种服务器通信软件的设计和开发中,已经广泛地使用到软件设计模式。尤其在大型的服务器通信软件开发中常会采用模块化设计。当一个庞大的服务器系统执行任务时,往往要通过其中不同的模块进行协作完成,在这种情况下各机间的数据通信会变得异常繁琐和复杂。另外不同操作系统通信机制的不同也会影响通信软件的开发和效率,网络编程人员通常从底层进行开发,这大大增加了软件开发的难度和周期。针对以上存在的问题,ACE自适应通信构架给出了良好的解决方案,ACE能够跨越多种操作系统平台,可进行通用的网络编程任务,并结合软件设计模式,避免了通信软件根据不同环境需要重新开发的弱点,减少了软件开发的周期和资金,简化和强化了系统的设计实现。

1 ACE框架

ACE自适应通信环境(ADAPTIVE CommunicationEnvironment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步等。ACE体系结构包括3个基本层次:操作系统适配层、C++包装层、框架组件层。操作系统适配层直接驻留在用C写成的本地OS API之上,将ACE中的其他层与OS API相关联的平台专有特性屏蔽开来。由于ACE操作适配层所提供的抽象,极大地增强了ACE的可移植性和可维护性。C++包装层通过提供类型安全的C++接口简化通信应用程序的开发,各种应用可以有选择地继承、聚合或实例化其中的组件来使用这些包装。ACE还包括一个高级的网络编程框架,集成并增强较低层次的C++包装层,该框架支持并发分布式服务动态配置。

大多数的网络化应用可以通过ACE这样的可移植中间件进行开发,因为ACE封装并加强了本地操作系统机制,通过其组件可以移除底层操作系统API的繁琐和易错性创建可重用的网络程序。

2 网络游戏服务器系统框架的设计

在设计网络服务器的过程中,如何保证服务器的安全和最大限度地支持更多的客户端连接是摆在开发者面前一个重要的问题。为了解决这2大问题,根据经验,在开发游戏服务器的过程中,采用如下的服务器架构可有效解决上述2个问题。

2.1 支持Gate的游戏服务器架构

在该架构下,Client和Gate Server相连,而不是直接和Game Server相连。Gate Server主要负责转发客户端和Game Server之间的数据包,Game Server负责处理游戏的所有逻辑。如图1所示。

采用该架构,有如下几个优点:客户端通过Gate Setver和游戏服务器Game Servet相连,Game Server IP对外不可见,这样Game Server更安全、更不易受攻击。一个Game Server同样也可以对应若干个Gate Server,当某个Gate Server受攻击或停机后,其他的Gate Server仍然照常运行,和其他Gate Server相连的客户端仍然可正常进行游戏;可支持更多的客户端连接。Gate Server把众多的客户端连接分散到多个Game Server中去,而不是独自来承担,从而可支持更多的客户端连接;Gate Server可分担一部分安全管理工作,减轻Game Server的压力。例如若某个客户端在一段时间内不发数据包,则把该客户端踢下线的工作可由Gate Server来完成。

2.2 软件功能模块划分

在设计服务器框架时,有一个基本原则,即框架和通信底层的具体实现需要分离,通信底层的具体实现不影响框架代码的修改。因为通信底层的具体实现有很多方式,不同操作系统平台的具体实现差别也很大。例如仅在Windows平台下就有基于Windows消息机制的、基于事件机制的、也有基于完成端口I/O模型的实现等。采用框架与通信底层相分离的原则,也有利于利用一些成熟的开发框架,比如使用的ACE框架。这样,当采用一种新的通信技术实现通信底层时,则可以不改变服务器框架,而只需要修改通信底层。在设计服务器时按照服务器框架与通信底层相分离的原则,将服务器框架设计为多个模块。并生成相应的动态链接库以供调用。软件模块框架如图2所示。

在软件模块划分中,通信底层由线程模块和通信模块组成,上层则由同步、联机管理和兴趣区管理等模块组成。其中同步模块是基于保守/乐观的同步算法构建的服务器同步子系统,客户端方面则可以使用航位推测法减少服务器的发包频率。兴趣区管理模块用于相关性信息过滤,通过订购玩家感兴趣的范围,可以有效减低网络带宽消耗和服务器负载。联机管理模块主要负责数据封包中的通信协议以及数据报的压缩和加密,在数据包中采用加密以增加服务器系统的安全性能,采用压缩以减少网络带宽消耗。

3 服务器系统通信底层的实现

3.1 线程模块的实现

在设计线程模块中使用ACE框架中的ACE_Task类和ACE_Message_Queue来实现主动对象模式,用于处理主动对象,实现多线程处理。传统的对象是被动的代码段,对象中的代码是在对他发出方法调用的线程中执行的,当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象却不一样。这些对象具有自己的命令执行线程,主动对象的方法将在自己的执行线程中执行,不会阻塞调用方法。由于主动对象的方法调用不会阻塞,这样就提高了系统响应速度。

设计中主动对象继承ACE_Task,应用open进行初始化,并派生线程去循环判断方法队列中是否有方法对象,若队列不为空则将方法出队并执行。如图3所示。

在创建任务和主动对象时,从ACE_Task类派生子类,在子类派生之后,采取以下步骤:

(1)实现服务初始化和终止方法:open()方法应该包含所有专属于任务的初始化代码;close()方法则包含相应的终止方法。

(2)调用启用(Activation)方法:在主动对象实例化后,必须通过调用activate()启用他。在主动对象中创建的线程的数目,以及其他一些参数,需传递给activate()方法,activate()方法会使sve()方法成为所有他生成的线程的启动点。

(3)实现服务专有的处理方法;在主动对象被启用后,各个新线程在svc()方法中启动。

并发策略实现的程序流程如图4所示:

3.2 通信模块的实现

3.2.1 反应器ACE Reactor和前摄器ACE Proactor

ACE Reactor(反应器)和Proactor(前摄器)是可扩展的面向对象多路分离器,他们分派应用专有的处理器,以响应多种类型的基于I/O、定时器、信号和同步的事件。

ACE_Reactor反应器应用于同步I/O操作,实现了事件的多路分离与分派,能够处理多个来源的I/O。使用反应器框架,需要执行3个步骤:从ACE_Event_Handler派生一个和多个事件处理器类,并定义相应的事件处理行为;向ACE_Reactor类登记应用的事件处理对象;运行ACE_Reactor事件循环,事件发生时回调事件处理器中的事件处理函数。

ACE_Proactor应用于异步I/O操作,他与反应器不同的是首先等待事件的完成,然后回调完成后的事件处理。当初始化I/O读写后把读写交给系统完成,等待事件完成后前摄器会将执行I/O结果返回给对象,并且回调完成后的事件处理。前摄式模型允许单个应用线程同时发起多个请求。这一设计允许单线程化应用并发的执行多个I/O操作,并且不会带来与传统的多线程化机制相关联的开销或设计复杂性。这样做大大减少了I/O处理时间。

3.2.2 利用前摄器实现高效异步I/O数据通信

在实现通信模块中使用的前摄器模式主要参与者有前摄发起器、完成处理器、异步操作、异步操作处理器、完成分派器。其结构如图5所示:

其中,前摄发起器(服务器应用的主线程)是应用中任何发起异步操作的实体。他将完成处理器和完成分派器登记到异步操作处理器。完成处理器接口用于异步操作完成通知,异步操作则是被用于代表应用执行请求。当异步操作完成时,异步操作处理器将应用通知委托给完成分配器。异步操作是由异步操作处理器来运行直至完成的,该组件通常由操作系统实现。完成分派器负责在异步操作完成时回调应用的完成处理器。当异步操作处理器完成异步发起的操作时,完成分配器代表应用执行应用回调。该机制的实现交互图如图6所示:

3.2.3 通信连接的建立

在具体通信模块中,所用到的ACE主要类有异步连接类、服务处理类、异步操作类和处理结果类。建立连接的过程为:创建异步主动连接和被动连接子类,在进行异步连接时,创建新的服务处理类,并将该服务类传递给异步连接类,这样,数据的传输就交给服务类去执行。实现服务处理子类中提供的挂钩方法,并通过创建ACE_Sock_Stream和异步读写流类来进行异步通信。在异步读写流初始化时将其注册到已创建的proactor中,并保存异步读写流类的句柄。最后数据传送的结果和状态交给处理结果类来处理。异步通信的初始化:

(1)分别创建异步主动连接类的派生类和被动连接类的派生类

class TCommandChannelConnectorAcelmpl:public ACE_Asynch_Connector<TCommandChannelAcelmpl>

class TCommandChannelAcceptorAcelmpI:public ACE_Asynch_Acceptor<TCommandChannelAceImpl>

(2)创建主动连接类对象connector和被动连接类对象acceptor;

(3)对于主动连接,调用connector.open(…),并将其注册到Proactor,由框架自动创建异步通信服务类,并且自动检测连接建立状态;

(4)对于被动连接,调用acceptor.open(…),并将其注册到Proactor,由框架自动创建异步通信服务类,并且自动检测连接建立状态,处于等待侦听状态;

整个异步通信机制实现的流程如图7所示:

3.2.4 ACE_Proactor完成多路分离

ACE_Proactor类负责驱动前摄器框架的完成处理。要让异步I/O完成事件处理得以发生,还需要运行前摄器的事件循环,其流程图如图8所示。

4 结 语

本文设计了一种适用于开发网络游戏的服务器端架构,并应用ACE框架组件和面向对象的设计模式完成服务器底层通信的开发。ACE作为一种免费开源的中间件,富含网络与系统编程的实用设计模式,具有跨平台等优越特性,能够适合任何通信软件的开发。尤其对于网络游戏服务器开发者而言,ACE无疑是一种值得借鉴的通信框架,具有良好的应用前景。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/saly/archive/2009/09/29/4617071.aspx

分享到:
评论

相关推荐

    ACE框架在网络游戏服务器中设计与应用

    ACE框架在网络游戏服务器中设计与应用

    ACE框架在网络游戏服务器中的设计与应用.doc

    4. **在网络游戏中应用ACE框架**:在设计网络游戏服务器时,ACE框架能有效地解决安全性问题和大量客户端连接的支持。例如,采用“支持Gate的游戏服务器架构”,客户端通过GateServer与GameServer交互,保护...

    C++网络编程ACE框架

    总之,ACE框架为Windows平台的网络编程提供了一种强大的工具,通过其高级抽象和跨平台能力,可以简化复杂网络应用的开发和维护,提高代码的可复用性和可维护性。对于希望深入网络编程并寻求高效解决方案的开发者来说...

    用ACE网络框架做的一个带有处理线程池的TCP服务器

    在ACE框架中,实现TCP服务器涉及网络套接字的创建、绑定、监听和接受连接等步骤,同时利用线程池进行并发处理。 3. **ACE框架**:ACE是一个开源的软件框架,其设计目标是提供一套可移植的、面向对象的中间件服务,...

    ACE网络客户端与服务器的实现

    总结,"ACE网络客户端与服务器的实现"涵盖了网络编程中的诸多关键点,包括连接管理、数据传输、事件处理、并发控制以及异常处理。使用ACE可以简化这些复杂的网络通信任务,让开发者专注于业务逻辑,提高开发效率。...

    ACE后台框架

    在使用ACE框架进行项目开发时,开发者通常会接触到如配置文件设置、路由规则编写、模型定义、控制器编写、视图渲染、中间件使用等多个环节。通过熟练掌握这些基本元素,开发者能够充分利用ACE的优势,构建出高效、...

    ace前台框架完整版下载

    1. **响应式设计**:Ace框架支持多种屏幕尺寸和设备,确保了在手机、平板和桌面电脑上的良好显示效果。 2. **丰富的组件库**:包括导航栏、按钮、表格、模态框、滑块、图表等多种组件,覆盖了日常开发所需的基本功能...

    C++网络编程(卷2) 基于ACE和框架的系统化复用

    《C++网络编程(卷2) 基于ACE和框架的系统化复用》是深入探讨C++在网络编程领域的经典之作,尤其注重利用ACE框架实现高效、可复用的系统设计。这本书主要涵盖了以下几个核心知识点: 1. **ACE框架**:ACE(Adaptive ...

    ACE 客户端与服务器模拟通信

    在“ACE 客户端与服务器模拟通信”这个场景中,我们探讨的是如何利用ACE库来实现客户端和服务器之间的交互。 首先,让我们详细了解一下ACE库的核心特性。ACE库提供了一整套的网络编程接口,包括TCP/IP、UDP、SCTP等...

    ACE网络编程基本框架

    总的来说,ACE网络编程框架提供了一套统一的API,使得开发者能够在不同的操作系统上编写可移植的网络应用。通过使用这些核心类,如`ACE_INET_Addr`、`ACE_SOCK_Connector`、`ACE_SOCK_Acceptor`和`ACE_SOCK_Stream`...

    ACE编写的简单网络服务器

    在ACE框架中,`ACE_Svc_Handler`是处理网络I/O的基本组件。它负责接收和发送数据,并实现特定的服务逻辑。通常,服务器会创建一个`ACE_Svc_Handler`实例,然后将其注册到ACE的IO复用机制(如`ACE_Reactor`或`ACE_...

    ACE框架相关资料

    ACE框架,全称为Adaptive Communication Environment,是一种跨平台的、开放源码的C++库,专为构建高性能、高可用性的...通过阅读和实践其中的内容,可以提升在C++网络编程领域的专业技能,更好地理解和应用ACE框架。

    ACE 弹幕 射击游戏

    总结起来,《ACE弹幕射击游戏》的设计与开发涵盖了游戏引擎选择、编程语言应用、图形渲染、网络同步、游戏物理系统以及音效设计等多个IT技术领域。每一环节都需要开发者具备深厚的技术功底和创新思维,才能创造出令...

    C++网络编程 卷2 基于ACE和框架的系统化复用

    《C++网络编程 卷2 基于ACE和框架的系统化复用》是一本深入探讨C++在网络编程领域的专著,尤其注重利用ACE框架实现高效、可复用的系统设计。这本书的核心内容围绕着如何利用C++语言特性以及ACE库来构建复杂的网络...

    C++网络编程+卷1,2+基于ACE和框架的系统化复用

    阅读这两卷书籍,开发者将能够掌握C++网络编程的核心技能,同时了解如何利用ACE框架提升系统的可靠性和可维护性,为构建复杂的企业级网络应用打下坚实基础。通过实践书中的例子,可以加深对理论知识的理解,提高实际...

    ACE技术文档及服务器客户端完整例子

    ACE(Adaptive Communication Environment)是一种跨平台的网络编程框架,专为分布式实时和嵌入式系统设计。这个压缩包包含了关于ACE技术的详尽文档和实际应用的例子,可以帮助开发者深入理解并有效地使用ACE进行...

    ACE 客户端 服务器 模版

    在ACE框架下,客户端可以使用ACE_SOCK_Connector类来建立与服务器的连接,并通过ACE_SOCK_Stream对象进行数据的读写。ACE提供了一种同步或异步的通信方式,可以根据应用需求选择合适的模型。 3. **服务器**:服务器...

    ace 框架 bootstrap

    Ace框架与Bootstrap是两个在Web开发中常用的工具,它们各自有着独特的优势,并且在某些情况下可以结合使用。本文将深入探讨这两个技术栈的核心概念、功能以及如何将它们整合在一起。 Ace框架,全称Ajax Control ...

Global site tag (gtag.js) - Google Analytics