• 美文
  • 文章
  • 散文
  • 日记
  • 诗歌
  • 小说
  • 故事
  • 句子
  • 作文
  • 签名
  • 祝福语
  • 情书
  • 范文
  • 读后感
  • 文学百科
  • 当前位置: 柠檬阅读网 > 句子 > 正文

    基于SmartFoxServer的网络游戏服务器系统的研究与设计:域名服务器dns地址

    时间:2019-04-20 03:15:47 来源:柠檬阅读网 本文已影响 柠檬阅读网手机站

      摘要:网络游戏服务器需要支持大规模用户同时在线,设计和开发上具有一定的复杂度。SmartFoxServer是一款成熟的游戏服务器软件,支持大规模高并发的用户访问。该文首先对SmartFoxServer进行了深入的研究,并介绍了如何基于SmartFoxServer开发具有可扩展性和可维护性的游戏服务器端系统。
      关键词:SmartFoxServer;游戏服务器;大规模;高并发
      中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)13-3075-03
      Based on the Research and Development of the Network Game Server System in SmartFoxServer
      LI Fang-kai, LIU Zhen-yu, LI min
      (Dept. of Computer Science and Technology, University of South China, Hengyang 421001, China)
      Abstract: The network game server needs to support large-scale users simultaneously online, on a certain complexity in the design and development. SmartFoxServer is a full-fledged game server software to support large-scale concurrent user access. This article first SmartFoxServer in-depth research, and describes how developed based SmartFoxServer scalability and maintainability of the game server-side system.
      Key words: SmartFoxServer; game server; large-scale; high concurrency
      截至2011年12月底,中国网络游戏用户规模达到3.24亿,较去年同期的3.04亿增长6.6%,网民使用比例为63.2%[1]。网络游戏作为名副其实的朝阳产业一直保持迅猛发展的势头[2]。面对游戏开发需求的灵活多变、业务逻辑的高复杂度和支撑大规模高并发的用户访问等问题,如何开发出高质量的游戏应用软件来满足游戏玩家更高的游戏要求,是我们迫切需要研究的课题。SmartFox? Server是一个较成熟的游戏服务器系统,国外在此平台上已经开发出了很多游戏,其中有名的企鹅俱乐部就是其中最成功的一个。
      本文基于SmartFoxServer(下文简称SFS)介绍了游戏服务器系统的设计和开发,内容包括SFS简介、SFS的扩展架构、服务器端总体设计和基于SFS的开发方法等。
      1 SmartFoxServer简介
      SFS是一个支持多平台部署、支持多人同时在线的游戏服务器引擎[3]。它有着出色的性能和可靠性,普通服务器上可以处理成千上万的并发客户端并且有着较低的CPU和内存使用。
      1.1SFS的主要特点
      1)服务器端扩展机制:支持用Java、Python、或者Flex三种语言编写服务器端游戏业务逻辑,并提供了相应语言的API去创建游戏逻辑中复杂的交互。
      2)SFS支持xml、json和Raw String三种数据格式与客户端交换信息。
      3)SFS提供了高性能的数据库访问引擎,可以非常容易地与关系数据库集成。
      4)SFS可以在配置文件中配置需要创建的房间(Room)或者区域(Zone),然后在系统启动的时候动态的创建。
      5)SFS提供了并行和集群配置去提高系统的扩展性和可用性。
      1.2 SFS的扩展架构
      SFS封装了与客户端通讯的Socket通信,经过测试性能是满足需求的,所以游戏服务器端业务逻辑是最需要关注的。
      图1展示了SFS的服务器端扩展架构。绿色的矩形框代表区域(zone),SFS可以配置多个区域,每个区域都相互隔离地运行相应的程序。每个区域下面可以包含任意数量的房间(灰色框),用户可以在房间里与每个人互动、聊天、玩游戏和数据交换等。每个区域下面可以配置数据库访问器,提供了访问关系数据库的功能。
      服务器端业务逻辑的扩展可以有两种级别,一种是区域级,另一种是房间级。它们之间主要区别是获取服务器端资源的不同。区域级扩展可以获取区域内的所有房间和所有连接的用户;房间级扩展仅仅能控制此房间内的用户和其他资源。一个典型的房间级扩展用例是运行不同类型游戏的多玩家系统。例如我们有20种不同的游戏,如纸牌、桌上游戏和实时游戏等,可以把服务器端逻辑写在房间级扩展之中。区域级扩展用例是带有注册系统的大厅创建等。
      SFS提供了一个抽象的扩展类AbstractExtension,每一个Java扩展都继承这个类。AbstractExtension提供了init、destroy、handleRequest和HandleInternalEvent方法。其中init方法是在扩展被激活的时候调用,destroy是在扩展停掉的时候调用,handleRequest是在客户端向服务器端发送消息,服务器端通过Socket接受到的时候调用,其中有三个重载的方法,目的是支持xml、json和raw String的信息传输格式。handleRequest方法的参数主要包括:命令、参数、哪个用户发的和来自哪个房间发的。
      
      图1
      2基于SmartFoxServer的网络游戏服务器系统的设计
      SFS提供了灵活的服务器端业务逻辑扩展机制,并且封装了与客户端的Socket通信。从性能优化的角度来讲,SFS已经做好了前端的通信部分,剩下的就是游戏业务逻辑的优化。游戏需求灵活多变,除了满足性能方面外,游戏业务逻辑的可扩展性和可维护性也是必须要考虑的。
      2.1游戏服务器端的设计
      游戏需要实时对战,必须保持客户端与服务器端的长Socket连接。用户与服务器一直保持连接直到用户退出系统与服务器断开连接。客户端与服务器端是通过命令的方式进行信息交互的,客户端发送一个命令,服务器端进行处理,并返回处理的结果[4]。服务器的接受命令接口如下:
      void handleRequest(String cmd, ActionscriptObject ao, User u, int fromRoom)
      void handleRequest(String cmd, String params[], User u, int fromRoom)
      void handleRequest(String cmd, JSONObject jso, User u, int fromRoom)
      SmartFoxServer支持三种通信格式,所以有三个重载的方法。服务器端收到客户端发送过来的命令后,需要进行专门的类进行处理。随着系统功能的增加,命令会越来越多,实现命令的类也越来越多。为此需要用命令模式来解耦发送者和接受者。命令模式又称为行动(Action)模式或交易(Transaction)模式,命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象[5]。设计如下:
      1)命令的接口:
      Public interface ICommand {
      Public void execute(Player player, String[] paramas, List response, Room fromRoom);
      }
      2)具体的命令,如打人命令的实现:
      Public class HitPlayer implements ICommand {
      Public void execute(Player player, String[] paramas, List response, Room fromRoom) {
      Player.getWeapon().getDamage();
      }}
      3)命令执行引擎:
      public class Invoker {
      private Map commands;
      public Invoker() {
      commands = new ConcurrentHashMap();
      }
      public void addCommand(String commName, ICommand command) {
      commands.put(commName, command);
      }public ICommand getCommand(String commName) {
      return (ICommand) commands.get(commName);
      public boolean request(Player player, String[] paramas, List response, Room fromRoom)throws Exception {
      ICommand command = (ICommand) commands.get(cmd);
      if (command != null) {
      command.execute(Player player, String[] paramas, List response, Room fromRoom);
      return true;
      } else {
      return false;
      } }}
      通过上述的示例,我们可以实现命令和具体命令实现类之间的松耦合,游戏业务逻辑可以通过增加新的命令实现,从而达到可扩展性。
      2.2游戏服务器端的开发步骤
      1)获取业务需求,相似的业务需求划分为一个模块。模块下的分包结构如图2:
      
      图2
      2)Action
      Action继承SFS的AbstractExtension,覆盖init、handleRequest和handleInternalEvent方法。在init方法中利用命令模式初始化命令和实现类之间的关系,在handleRequest中可以接收到客户端发送的命令,根据命令模式松耦合地执行命令。在handleInternalEv? ent方法中可以处理SFS发送的事件,如用户掉线和离开房间等。
      3)Cmd
      主要负责处理客户端发送过来的命令,解析参数,调用Service或者领域对象处理业务逻辑。原则上Cmd层要非常薄,不应该封装太多的业务逻辑。相反,应该把业务逻辑封装到Player、Team和Room中去,从而形成自己的核心领域模型,避免对SFS的过渡依赖。
      4)Service和Model
      大部分的业务逻辑都在此,封装了游戏业务逻辑的核心领域模型。游戏中核心的领域概念为:Player、Team和Room。房间包含Team,分红队和蓝队;Team包含Player;Player可以访问到Team。
      5)Dao
      此层为数据库访问层,只是单纯的CURD,不应该包含任何业务逻辑。SQL量不大的情况下可以用JDBC拼装字符串的形式访问数据库。但随着SQL量的增加,可以采用Mybatis的方式。
      6)Util
      此层主要封装一些公用的业务逻辑,如随机数的生成、日期的处理和一些静态常量数据等。
      3结束语
      SFS为开发游戏服务器端系统提供了基本的框架和与客户端通信接口,游戏业务逻辑的开发可以通过其扩展机制来达到可扩展性。实时性游戏对系统的响应时间有着较高的要求,主要的瓶颈在数据库。所以在实时对战过程中,不能实时与数据库交互,可以开一个定时任务在后端定时保存,把实时数据都存在内存中。
      参考文献:
      [1]中国互联网络发展状况统计报告[R].2012.省略nic.cn/research/bgxz/tjbg/201201/P020120118512855484817.pdf.
      [2]张颌萍.网络游戏广告受众群体传播特征研究[D].上海:华东师范大学,2011.
      [3] SmartFoxServer[EB/OL]. http://www.省略/.
      [4]刘彬.即时通信协议分析与监控的关键技术研究[D].郑州:中国人民解放军信息工程大学,2007.
      [5]阎宏.Java与模式[M].北京:电子工业出版社.2002.

    相关热词搜索: 服务器 网络游戏 研究 设计

    • 文学百科
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章