zoukankan      html  css  js  c++  java
  • 架构系统游戏系统开发笔记(五)——服务端系统分层

    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

            原来很想按序顺写来下,到了第五篇是盘算先写架构的,无法这货色时暂没办法弄的较比通透,拖了久很也还是得觉写起来有难题。有一个客观因素是这阵子有点忙,很多货色要做,也没办法留出多许间时用来习学。

            还是先写经已有点观点的货色吧....

        关于架构:

            一个杂复系统开始施工前首先要计划其架构,但这个时暂没能力说太细,所以只单简一提。

            什么是架构呢?

            我解理的架构就是一组可以描述服务端能功的观点模型,它能把杂复的问题应用雷同一统的式方停止描述,或者说可以把一个杂复的现实问题转化为对相可控的程工问题。它甚至不要需任何代码,不要需杂复的UML图,不管通过任何式方只要可以简化并描述问题。而且是不并只有最下层的架构才叫架构,我得觉它应当是一棵决策树,个一每节点的架构计划都可以叫做理处该问题的架构。

            对于一套整完的服务端架构说来,应当含包软件架构和硬件架构。有时候一些软件上极难理处的问题却可以通过硬件方案省力理处,所以对于网络游戏种这对相大型的软件说来,硬件方案计划也是可不缺乏的。

            对架构的求要含包两个方面,第一个是硬性求要,求要可以在这套架构的础基上实现预期的游戏能功并拥有必定水平的可用性;第二个是优化求要,件条许允的情况下尽可能的使得架构础基上的能功发开清晰单简,尽可能做到对未知求需拥有好良的伸缩性,尽可能的对运行期效率有所障保等等(你所能想到的好的方面)。

        系统层分:

            系统层分是软件架构计划的一个重要方面,层分的思想在《代码大全》里有对相具体的描述,应当是较比早就提出了,是低降系统杂复度的一种较比见常的做法。

            层分的粒度是根据问题的杂复水平以及具体的务业内容来决议的,对于单简问题应用细过的层分不只是杀鸡用牛刀的问题,实现起来也会变得啰嗦冗杂,单简的问题会被搞杂复。这可以解理为对单简问题予赋了太多的观点,观点种这货色最好坚持精简,这是计划范畴的问题了。 

            游戏的服务端根据游戏的类型和公司的实际情况会有多许异差,限于个人知识没办法一一较比说明,我只写我对相熟习的MMOARPG的服务端计划。

        一般也是相似软件业较比经典的三层别分(没记错的话应当是 系统层、务业逻辑层、现表层),首先是系统层,然后是引擎层,最后是逻辑层。面下别分分析:

        · 系统层:

        每日一道理
    书,各种各样的书。书,寄托着人类热切的希望;书,蕴含着人类丰富的感悟。提起书,会有说不完的话语……

            之所以要需有这么一层重要是因为程序语言层面可以供给的能功分十限有,更强力的能功常常要通过操作系统取得(比如程线和程线的各种锁)。当然您也可以尝尝防止直接从操作系统取得这些能功,而部全改用第三方库来理处问题,但他们的底层特性确定也只能是来自操作系统,别区只是是不是是你自己来做这些事件而已。

            该层计划的目标是要把有所赖依特定系统的逻辑部全断绝在这一层内,防止下层逻辑对操作系统生产直接赖依。同时,根据下层求需向下层供给足够多的底层能功。大概不会及涉较比杂复的程序编码,但这层实现起来也是当相不省力的,因为当初基本都市有跨平台的求需,所以必定要在系统层斟酌好程序植移问题,把程序规划好,尽量在植移的时候只要要按定义好的口接用最量少的代码再实现一个该系统的版本。同时,发开系统层也是要需对主流操作系统编程有必定验经(因为这个地方常常多许坑),防止系统API误用致使期后BUG查追起来分十难题。

            必定要理处的清洁稳定,这样才称得上是为下层发开打下一个好良基石了。

        · 引擎层:

            游戏的逻辑层有着海量的游戏逻辑,所以为了简化问题,还是把其中一些和游戏内容联关不大但必可不少的能功取抽出来独自作为一层。即去掉具体游戏逻辑的血肉,剩来下的其实都可以括包到引擎中去。除此之外,计划引擎层也是较比经济的做法,因为和具体游戏逻辑不联关,又应有尽有合集了多许共公件组,它日做其他项目的时候可以完完全全的复用起来。引擎层铺设在系统层的础基上,与操作系统相断绝。

            一般而言引擎层会及涉的问题:通信、日记、数据库、场景管理、配置管理、主循环、脚本系统、计时器、内存管理、程线管理、容错机制、础基游戏对象、野视管理等。具体项目不必定这么别分,但一般为认这套能功是MMOARPG服务端标配了。各个块模意思也很清晰,所以我想用不一一分析也不影响解理引擎层是怎样的货色。

        · 逻辑层:

            逻辑层建立在引擎层的础基上,一般不要需费心除游戏能功之外的货色(如果不是的话平日示暗结构计划不公道)。到了逻辑层当然就是指那些与游戏内容亲密联关的程序了,项目对游戏能功的求要越高,逻辑层的代码就越多。多是必定的,但具体多多少,增加的快不快还是必定水平上取决于发开者对游戏的解理,看看是不是能对一些能功停止单简公道的抽象。

            逻辑层的重要就堆堆逻辑(分十碎琐),一般对编码能力求要不高,但实际上对计划的求要颇高,代码多则BUG多,太多能功写起来要命维护起来就更要命了...但据视察写逻辑的一般是程序部门人数比重最大的,而且对编码能力又没那么高的求要,所以一般都拿来制控本成了,所以好良计划什么的是不能有太多等待。要么就是先派一俩强力党先把核心能功写好,防止让期后纯粹来写逻辑的人来计划块模,这样可能还较比稳当些。

            逻辑层一般括包:具体游戏对象(玩家、NPC)、基本游戏行为(天聊、斗战,挪动常常会被抽到引擎层去)、帮会、务任、道具、技能、本副、物宠、友好、PK等。

            关于逻辑层的计划有多许货色可以讲,这里先不开展。

    文章结束给大家分享下程序员的一些笑话语录: 祝大家在以后的日子里. 男生象Oracle般健壮; 女生象win7般漂亮; 桃花运象IE中毒般频繁; 钱包如Gmail容量般壮大, 升职速度赶上微软打补丁 , 追女朋友像木马一样猖獗, 生活像重装电脑后一样幸福, 写程序敲代码和聊天一样有**。

  • 相关阅读:
    el-cascader回显问题
    nuxt + ueditor国际化
    nuxt + element + i18n 国际化element(我用的i18n@8.x版本)
    CDH| 组件的使用-Flume| Kafka| Oozie基于Hue的任务调度
    CDH| Hive| Hue| Sqoop| Impala等组件安装部署
    CDH| 组件的安装-HDFS的配置 | Flume| Kafka|
    Flink| 实时需要分析
    Flink| 状态一致性
    Flink| 容错机制
    Flink| 第一个窗口触发时间
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3052235.html
Copyright © 2011-2022 走看看