我所理解的网络游戏<一>:网游的顶层设计

网游的基本结构

各大模块的基本功能如下

· 服务器端

登陆服:处理新建玩家、登陆逻辑。

场景服:处理场景服中的逻辑。

中心服:处理跨服的逻辑,实现不同场景服进程的数据调度,以及向数据库查询数据。

数据库前端:定时将这里缓存的数据存入数据库。

服务器管理服:通过配置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相关(原理与美术制作规范)、动画相关(原理与美术制作规范)、美术工具设计、破解客户端方法与对策。

公共部分:性能优化与代码检测、测试游戏的方法、游戏开发团队的组建、改善游戏体验的要素。

我所理解的网络游戏<一>:网游的顶层设计

时间: 2024-12-23 18:10:18

我所理解的网络游戏<一>:网游的顶层设计的相关文章

VC++实战《星际传奇》网游课程第一部分网络游戏开发基础篇(游戏引擎设计)

本系列课程基于最新的DirectX11接口进行深入细致的讲解,内容涉及D3D11原理与应用.DirectInput.DirectSound等: 教程中专门针对新兴的D3D11接口展开深入的讲解,详细讲解了D3D11渲染管线.DirectComputer(参看<VC++游戏开发系列之Directcomputer并行计算原理与实践--DX11游戏实战开发>).Tessellation.多线程渲染.Shader动态链接等新内容.新知识.并且基于这些内容的基础,更进一步讲解了光照模型原理及实现.高级的

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

本文参考并引用了部分腾讯游戏学院的相关技术文章内容,感谢原作者的分享. 1.前言 以现在主流的即时通讯应用形态来讲,一个完整的即时通讯IM应用其实是即时通信(英文简写:IM=Instant messaging)和实时通信(英文简写:RTC=Real-time communication)2种技术组合在一起的一整套网络通信系统.之所以以IM这个简写代称整个即时通讯软件,其实是历史原因了(因为早期的诸如ICQ这样的即时通讯工具,也就是文字聊天,并没有加入实时音视频这样的实时通信技术),对这个话题有兴

C++网络游戏零基础开发视频教程(300+课时,MINI快跑、水果忍者、DirectX技术、天鹰教3D网游)

C++网络游戏零基础开发视频教程(300+课时,MINI快跑.水果忍者.DirectX技术.天鹰教3D网游)下载联系QQ:1026270010 距离二十世纪八十年代c++语言的诞生,到如今已经有三十多年的历史,随着c++语言的发展,它被应用于在越来越多的领域.C++是一个多泛型的编程语言,它既可以面向过程,也是一门面向对象的语言.C++是一门使用非常广泛的计算机编程语言,因此它受到了越来越多程序员的亲睐.C++相关专家介绍:c++的就业领域很广泛,相对于java和其他语言来说有很多优点,很多大公

[盘点]现今热门的h5网游

各位好久不见,过年的休息时间已经结束,大家休息了一周,又要开始新的一年的奋斗了!于是小编从回来的第一天就开始花时间自己整理了一篇文章,所有各位是不是应该夸一夸小编呢?因为小编又要开始分享“干货”了.(都是小编自己的一些理解,若有错误或不足,请提出) 各位在过年的这一段时间里,都干了些啥呢? 别的不说,肯定有很多单身的童鞋们被长辈们同时逼问事业与爱情上的种种事情,当然小编也是一样,然后各种躲着不肯见人,于是无聊地掏出自己的手机,打开游戏,思考人生. (强行回归话题,感觉没啥关系,其实是扯淡) 说到

97VPN网游加速器 用户使用手册

197VPN网游加速器   1.1.    系统概述 197VPN网游加速器能有效解决玩家在网游中遇到的登录过慢,延时过高,容易掉线等问题,通过代理服务器转发游戏数据包,在游戏服务器与玩家之间建立一个高速通道,在软件层面解决网络的延迟和堵塞问题,在服务器之间建立智能高速的内部通道,有效的降低游戏延迟,提高网游质量. 1.2.   系统特点 提供专业的网络游戏加速服务,支持所有主流网络游戏,采用国内先进.自主研发的网络加速技术,智能监控网络压力,保障您的网络通畅,连接快捷,加速性能稳定,且安全可靠

网游用户必须实名!凛冬将至,这些游戏商在瑟瑟发抖

作为互联网消费的大户--网游一直是众多企业的心头肉,想方设法地研发.代理多个类型的网游,并挖空心思地在收费模式.道具虚拟币等上面创新,试图让网民心甘情愿地在网游中进行消费.但不可否认的是,虽然网游已经成为很多人的休闲方式,但也带来了众多负面问题.因此,政府对网游的监管力度也是越来越强. 近日,文化部发布<关于规范网络游戏运营加强事中事后监管工作的通知>,其中值得游戏商注意的有多个要点.首次明确规定网络游戏虚拟货币.虚拟道具不能兑换法定货币.应要求用户使用有效身份证件进行实名注册.不得为使用游客

网游新规来袭,玩家还要为《阴阳师》费氪伤肝吗?

是否这一新规,会让阴阳师的火爆出现变数呢?欧洲人,非洲人的问题将变得不难么重要了呢? 文/张书乐 日前,文化部在其官网发布<关于规范网络游戏运营加强事中事后监管工作的通知>(以下称<通知>),其中规定,网络游戏运营企业应当在游戏的官方网站或者游戏内显著位置公布参与用户的随机抽取结果.目前,几乎所有的游戏都没有公布抽卡概率,包括近期最为火爆的<阴阳师>,该游戏ssr的获得概率一直是个谜.那么,新规的实行,是否会对<阴阳师>等爆款游戏产生影响? 对此,每日经济新

决战JavaScript服务端网游开发

在经过三年多的手游客户端学习与开发练习后,我发现仅满足于前端仅能在游戏开发中占居一席之地.要想全面深入理解手游开发逻辑,特别是如今的网络时代的手游数据管理及通信逻辑,必须掌握一定的服务器端开发技术.作一个十分相似的比较,就像Web开发,只懂得前端技术(HTML/HTML5/CSS/DOM/BOM/JQUERY/JS),也只能是具备了一条腿走路的能力,而两条腿走路则更是每一个程序员所期望的.因此,作为一名优秀的Web前端程序员最好对于 服务器端开发技术也有一定程度的了解. 值得欣喜的是,相当多的程

网游练习总结(1)

最近一段时间在校也闲得没事干,反正是好长一段时间,干脆就做一个<中国象棋>网游耍耍打发时间.弄了好久没有写总结,以及整个过程中遇到的问题,今天就赶紧写一哈,难免后面就会忘了. 一.注册登录界面: 可能会说这么简单的游戏,网上可能例子很多,也没有必要弄注册这样的功能,其实我只是学着玩玩哈. 关于注册我使用的是php与as3.0交互做的,有与php学的非常浅,也遇到了不少问题: 1.检测是否注册成功:这个也困了时间不是很长,但是觉得比较重要,我搜了一些资料找到的: mysql_affected_r