网游的基本结构
各大模块的基本功能如下
· 服务器端
登陆服:处理新建玩家、登陆逻辑。
场景服:处理场景服中的逻辑。
中心服:处理跨服的逻辑,实现不同场景服进程的数据调度,以及向数据库查询数据。
数据库前端:定时将这里缓存的数据存入数据库。
服务器管理服:通过配置xml管理多个服务器的启动关闭,作为守护程序定期与所有服务器相连,当不能接受到某个服务器的定期连接时认为该服务器宕机,做相应处理并重启服务器。
运营对接服务器:连接多个服务器,做GM管理,处理来自运营平台的登陆、充值、身份验证。
日志服务器:记录玩家的数据(包括玩家登入登出记录;升级、经验、道具的获得途径、游戏时间;玩家消费的倾向等)供运营做数据挖掘及服务器意外宕机后的赔付依据。
· 客户端
接收玩家输入,处理游戏逻辑,显示游戏。
接着讨论一下上述五个大模块具体该实现那些功能,能够拆分成那些小的模块,分为那些层次。这里只讨论大模块所能拆分出那些小模块,以及这些模块要负责的功能,至于这些模块如何设计,将在后续讨论。
场景服的结构
首先就场景服进行讨论
· 可公共的网络与数据库底层
场景服最底层的是“数据库存储过程调用”、“网络消息接收”和“网络消息发送”,这些功能经过抽象可以供其他服务器模块(中心服、登陆服)共用。
数据库存储过程调用用于与数据库前端进行交换。其中一种做法是通过存储过程id区分存储过程,以数据流的方式填充存储过程的输入参数,以数据流的方式返回存储过程输出结果。
网络消息接收和网络消息发送通过对socket的进一步封装,使得消息能够很方便的被解析和发送,它们通常要实现的功能包括网络连接建立、套接字的解析、数据加密与解密、数据包的组包与拆包、数据流的写入与读取。
游戏业务逻辑执行完毕后再调用底层的网络消息发送,向中心服、或客户端发送消息。消息发送既可以直接对流进行写入,可以填充一个结构体,在将结构体写入流。后一种方法的好处在于能够确保进入流之中的消息的格式,不会出现直接进行流写入时会出现漏掉消息的某个数据导致消息格式出错的问题。
还有就是网络通信消息的大小对于受流量限制的手机游戏至关重要,老邱提出可以使用Google开源项目的Protocol buffers,对消息进行压缩。(相关介绍)
· 可公共的事件触发层
往上一层是“事件监听”、“日志管理”以及“消息派发”。这些功能中,事件监听是可以供其他服务器模块共用。
事件监听包括数据库回调得到监听、客户端网络消息监听、场景服不同模块的消息监听、中心服数据返回的监听。通过监听事件的消息码,消息会触发相应事件监听的消息回调。
消息派发与事件监听相类似,主要可以分为网络消息派发、响应消息派发、否决消息派发。网络消息派发是接收到客户端或中心服消息后进行派发。响应消息派发是场景服中某个业务逻辑模块在处理自己的逻辑业务时需要通知其他逻辑业务模块进行相应更新。否决消息派发是场景服中某个业务逻辑模块在处理自己的逻辑业务时需要得到其他模块的验证。
消息的派发还要做一个一定时间内接收同一客户端消息的限制,当消息接收频率超过一定数值,可以判断客户端至少使用了按键精灵或者加速器,甚至客户端已经被破解了,这样的话可以考虑将该客户端踢下线。
日志可以分为错误/警告日志和玩家记录日志。错误/警告日志用于记录游戏执行中发生的异常,编写业务逻辑模块的程序员应该考虑一些异常情况,在发现这种异常情况时调用错误/警告日志进行记录,这样能为程序的bug调试提供线索;
玩家记录日志用于记录玩家的重要数据,如玩家等级、经验、物品等,以防游戏发送崩溃、回档等情况时检查错误,并作为营运期发生意外异常时赔偿给玩家的根据。这种日志将发送到日志服务器存储到数据空中。关于玩家记录的日志,由于数据量会十分庞大,具体工作应该独立出来成为另一个服务器,即日志服务器。这层仅用于向日志服务器发送数据。
· 数据层
往上一层是数据层,这里包括玩家、宠物、坐骑、物品、容器的数据。这些数据类的接口需要定义好,方便扩展,例如可以将所有数据获取都集中定义到一个函数,通过传入的枚举区分所要获取的数据,设置数据也是使用同样的方法。通过这样的接口定义,有助于扩展,更有助于逻辑脚本的调用,是的上面一层的游戏业务逻辑层更为灵活。
数据层还要考虑两种情况,在线玩家的完整在线数据,和因跨服业务逻辑导致的离线玩家部分数据请求。这些请求由跨服业务逻辑发出,程序查询数据库或获得。获得得结果可以缓存在中心服中,并同步到发起查询的场景服中,供下一次请求使用。离线玩家再次上线时,与之相关的离线部分数据应从缓存中清理掉。
· 逻辑层
最上层的是游戏业务逻辑层,这里主要可以分为场景服业务逻辑,和跨服业务逻辑。场景服业务逻辑是指该业务逻辑需要的数据都在同一个场景服进程中;而跨服业务逻辑是指该业务逻辑需要的数据不一定在同一个场景服进程中,有可能需要中心服进行跨服的数据查找。这里可以产生不同的设计,例如数据只存在场景服进程中,中心服只是做一个调度数据的功能;或者数据即存在场景服,中心服有所有的数据。我并没有实现过跨服业务逻辑的功能,所以暂时并不知道那种设计更好,以及应该考虑的因素。
不同的设计按照策划的需求,场景服业务逻辑派生出养成模块、战斗模块、玩家活动响应、玩家数据管理模块、小游戏模块;跨服业务逻辑派生出副本模块、跨服PVP模块、好友模块、聊天模块、帮派模块、交易模块。
养成模块包括玩家属性提升(科技)、技能升级、坐骑的升级、宠物的升级
战斗模块
玩家活动响应,包括玩家行为的广播、任务模块
玩家数据管理模块
小游戏模块
配置数据和脚本逻辑都是对游戏业务逻辑层的支援。配置数据是提供给策划填写游戏内容。而逻辑脚本是用于描述游戏业务逻辑的。脚本可以使用Lua、Python等。为何要使用脚本?使用脚本的好处是灵活,针对多变的策划需求,脚本编写的业务逻辑可以不经重新编译就能应对小规模的修改。如何提高脚本代码的执行效率?脚本应只调用封装好的C++函数组织成业务逻辑,而不进行数据运算。这样效率接近C++编译的原生代码。
中心服的结构
中心服的结构与场景服的结构基本相同,不同之处在于其主要处理的是跨场景服的游戏业务逻辑。而逻辑层的具体设计可以采取dll插件式的设计,主要是因应跨服逻辑可能出现的增减,同时也是的插件专门针对一个模块能比较独立。

登陆服的结构
登陆服主要起到的功能包括:

1. 创建新玩家
2. ( 登陆服、中心服、场景服之间的关系是怎样的?用户登陆的流程应该是先到哪个服,怎样走?)
数据库前端
数据库前端主要起一个缓存数据提供效率,统一管理数据库操作的作用,结构如下:
(数据库前端担负一些什么功能?)
服务器管理服的结构
(所担负的功能;多线程结构)
运营对接服的结构
(所担负的功能——用例图;能够选用的技术;对接的模式)
日志服的结构
(所担负功能;大量数据应如何处理,内存不足,占用过高,缓存的使用)
客户端的结构
客户端的功能包括游戏资源的版本验证与下载、与服务器网络通信、游戏场景构建、模型绘制、动画和特效的播放、UI界面和玩家输入的响应。
具体结构大致如下
总体来说可以划分为三条主线:UI、网络、以及资源与数据。按照MVC的分层模式,可以分为:
表现层,主要包括UI事件响应的表现,当前摄像机的设置,以及动态/静态(场景)物体的表现,这一层与客户端的图形引擎显示相关的接口紧密结合;
业务逻辑层,主要包括UI界面上的游戏逻辑,不同摄像机根据需求的切换,以及动态/静态(场景)物体管理、动态物体的业务逻辑还有动态物体的生成、变化与销毁。这一层是游戏主要玩法的所在,大量投入逻辑程序员开发的地方;同时也是会因应策划需求,容易发生变化的地方。这一层会与客户端的UI接口,物理引擎,AI引擎紧密相连;
数据层,可分为元数据层、数据加载层、数据管理层,主要负责数据的读取、解析和管理。这些数据可以分为来自网络的网络通信消息、UI资源、配置和本地记录数据、由模型特性声效组成的美术资源。所以这一层会跟客户端图形引擎的资源解析,客户端目标系统的文件系统、网络系统紧密相关。这一层要考虑到数据加载的不同步问题,具体而言就是微端要求玩家能够下载尽可能小的客户端快速进入并开始游戏,导致这些资源,特别是美术资源,在游戏运行时可能正在下载。要保证在没有资源的情况下游戏能够运行,同时当资源下载好后立刻显示出来。
辅助工具
网络游戏的开发除了以上的最终发布的制成品外,还需要很多的辅助工具。以下仅作列举和简单说明,具体讨论留在后面。
名称 作用 描述
机器人系统 对服务器进行模拟的压力测试 主要通过模拟多人同时与服务器进行通信,对服务器进行压力测试
通过测试,可以看到服务器的性能;甚至在可以反映出服务器是否出现内存泄露等情况
配置表编辑工具 供策划填写配置表 通过对编辑工具的限制,能够有效避免策划填错数据的问题
摆怪编辑器 供策划设计关卡、布置场景和怪物 与场景编辑器,甚至是游戏引擎紧密结合,最终产生一张物件id和位置等相关信息的配置表
粒子编辑器 供美术将粒子系统编辑成为特效 与游戏引擎相结合,美术附上着色器、贴图、模型能够看到特效的效果
场景阻挡数据的导出工具 供美术标记场景中玩家可行走的区域 阻挡数据也会应用到自动寻路和npc行走等功能中,同时也是服务器验证玩家位置的依据之一
动画组合编辑器 供美术将动画和特效组合到一起 具体的例子是技能编辑器,将不同的技能动画和特效按美术所设想的顺序、间隔播放
摄像机编辑器 供美术设置不同的摄像机 与游戏引擎相结合,美术在一个测试场景调整不同摄像机的参数,以及摄像机拉近推远的参数
场景动画编辑器 供美术在场景中编辑模型、摄像机、特效组合成场景动画 可考虑与上面的美术工具相结合
这些工具或是与客户端引擎紧密相连,或是与通信消息相关,或是利用到一些工具,可以制作为独立的小程序,或者游戏引擎、美术工具的插件。
后续内容:
已完成:
进行中:客户端的主体设计
计划中:
服务器相关:服务器的主体设计(场景服与中心服)、网络通信设计、数据缓存与数据库通信设计、数据层设计、逻辑层设计与dll划分、战斗模块设计、机器人压力测试工具设计、服务器管理工具设计、运营对接服务器设计、攻击服务器方式及对策。
客户端相关:资源动态加载与管理、场景管理、战斗模块设计、特效实现方式、UI相关(原理与美术制作规范)、动画相关(原理与美术制作规范)、美术工具设计、破解客户端方法与对策。
公共部分:性能优化与代码检测、测试游戏的方法、游戏开发团队的组建、改善游戏体验的要素。

转载于:https://www.cnblogs.com/alonecat06/p/3778678.html

我所理解的网络游戏一:网游的顶层设计相关推荐

  1. 网游装备防盗设计之交易系统

    网游装备防盗设计之交易系统 发布日期:7/24/2007 3:08:11 PM 如果你玩过网游不管你有没有被盗过.只要你在里面玩的时间不算太少.或是你一个大号的朋友也不认的.那么你就会知到装备被盗的事 ...

  2. 网游战斗系统服务器设计,数值分享 – ARPG战斗系统数值设计

    数值分享–ARPG战斗系统数值设计[什么是战斗系统] 战斗系统是角色扮演游戏的核心玩法原型,我们常说的"打怪"."PK"."练级"等游戏玩法 ...

  3. 《新飞飞》网游服务器架构设计

     原文:http://wenku.baidu.com/view/baa819d4b9f3f90f76c61bac.html?from=rec&pos=3&weight=29&l ...

  4. 【转】《新飞飞》网游服务器架构设计

     原文:http://wenku.baidu.com/view/baa819d4b9f3f90f76c61bac.html?from=rec&pos=3&weight=29&l ...

  5. 一些关于网游服务器的东东

    拼包函数及网络封包的异常处理(含代码) 本文作者:sodme 本文出处:http://blog.csdn.net/sodme 声明:本文可以不经作者同意任意转载.复制.传播,但任何对本文的引用都请保留 ...

  6. 网游服务器通信架构设计

    随着网游从业者的规模和需求不断扩大,越来越多的朋友进入了网游开发这个领域,使得市场中网游开发技术相关的需求量迅猛增长.目前,网游行业比较紧缺的是具有较深技术功底的"专家型"开发者, ...

  7. 网游服务器通信架构的设计

    转自:http://www.cppblog.com/jack-wang/archive/2009/01/02/70963.aspx 随着网游从业者的规模和需求不断扩大,越来越多的朋友进入了网游开发这个 ...

  8. 以网游服务端的网络接入层设计为例,理解实时通信的技术挑战

    前言 以现在主流的即时通讯应用形态来讲,一个完整的即时通讯IM应用其实是即时通信(英文简写:IM=Instant messaging)和实时通信(英文简写:RTC=Real-time communic ...

  9. 其实你不懂网游的心(中)--网络游戏是洪水猛兽?

    副标题:致非网络游戏玩家 网络游戏是洪水猛兽? 前几年我比较喜欢一句俗话叫:没吃过猪肉,还没见过猪跑.有一段时间我自己觉得这话话粗理不粗的俗语还挺有道理.但是凡事都不能较真,我发现真正较真起来,这句话 ...

  10. HTML5期末大作业:龙之谷网络游戏网站设计——龙之谷网络游戏(9页) 学生网游网页设计模板 大学生HTML网页制作作品 简单手游网页设计成品 dreamweaver学生网站模板

    HTML5期末大作业:龙之谷网络游戏网站设计--龙之谷网络游戏(9页) 学生网游网页设计模板 大学生HTML网页制作作品 简单手游网页设计成品 dreamweaver学生网站模板 常见网页设计作业题材 ...

最新文章

  1. java 集合类源码分析--collections
  2. windows调试器设置
  3. Spring boot 默认静态资源路径与手动配置访问路径的方法
  4. SAP Spartacus 如何根据 page layout 获得对应支持的 slots
  5. 下午去银行办理按揭手续,不得已调休半天
  6. 得到前i-1个数中比A[i]小的最大值,使用set,然后二分查找
  7. 织梦的if(!defined('DEDEINC')) exit("Request Error!");解析
  8. vue 集成 Loading 加载效果
  9. 最近找到了一个免费的python教程,两周学会了python开发
  10. 1g的树莓派4b能做什么_树莓派4B系统安装及配置
  11. Macbook使用技巧,分享必备
  12. OpenGL蓝宝书第五章代码勘误以及惯性坐标系去解释模型变换:Pyramid.cpp
  13. 三菱plc232数据线驱动下载_三菱FX系列PLC没有编程电缆,通过DIY232串口下载程序...
  14. 华为各系列交换机限速配置
  15. led同步回显到计算机屏幕,手把手教您如何将笔记本电脑的画面投屏到LED大屏幕上显示,音视频同步传输...
  16. 分布式计算 lab2 Java RMI
  17. 杠杆股票平仓后该如何处理?
  18. 制造业数字化转型内涵和过程
  19. 毕业工作五年的总结和感悟(上)
  20. 安装及配置 Mac 上的 Rime 输入法——鼠鬚管 (Squirrel)(也适用于小狼豪)

热门文章

  1. Git error: unable to create file xxx: Filename too long
  2. 通过经纬度调用百度sdk api实现查询详细地址 Java
  3. RAW 图像格式转换工具 bayer2rgb
  4. java sqlite sqlite_busy_sqlite3 busy timeout
  5. 解决NUC8豆子峡谷装黑苹果键盘错位的设置
  6. html在手机显示时间,手机北京时间校准
  7. 海尔构建全球首个智能制造云平台COSMO
  8. Mc1.16forge官混教程/教补-#6 原版配方数据包
  9. linux局域网ip查询软件,局域网IP查询
  10. 2019年最新手机CPU处理器性能排行天梯图