开发历程


项目是从8月20日左右开始开发的,到今天一个月不到吧。

除了底层库和服务器架构外我们大致开发了5个服务器为:

  一 ) . 战斗服务器

  二 ) . 匹配服务器

  三 ) . 验证服务器

  四 ) . 网关服务器

  五 ) . 游戏服务器

其中 战斗服务器 和 匹配服务器是我负责的 (确实撸的很爽 哈哈哈) :

在有一套成熟的框架体系下撸代码的体验就是快速稳定健全。

战斗服务器总结


战斗服务器是集群节点的配置。

为了提高服务器的容错和开发速度。我们把所有集群服务器都设置为单线程模式。允许一台服务器部署多个服务器。

战斗服务器主要处理游戏战斗中事务:

  创建游戏房间

  提供英雄选择 技能选择 皮肤选择

  提供游戏过程支持(使用技能 / 请求移动 / 断线重连 / 游戏结算 / 游戏规则 / 战斗回放)

逻辑帧

  我们在设计战斗服务器之初就定义好了游戏有逻辑帧的概念,同时客户端也遵循该逻辑帧的时间并且客户端的逻辑帧时间由服务器下发。

  以此概念就能保证在大多情况下客户端和服务器的逻辑帧是相同的,有时候可能会出现指令有1-2帧的误差,但这并不影响,因为一个逻辑帧也就几十毫秒,玩家基本感知不到。(网络延迟不参与此处误差计算)

  有了逻辑帧概念后,服务器只需要将收到客户端的所有请求信息全部压入队列。当下一个逻辑帧到达后将所有消息取出,依次处理并下发游戏消息。而客户端收到网络消息就只需做对应的播放就可以,也就是说客户端就算不请求服务器但是收到了服务器的下发消息也需要对该消息进行播放处理。

战斗回访

  服务器可以借逻辑帧的概念将每帧下发的消息都存储到 redis 然后用于支持战斗回访。

技能系统

  为了满足策划的脑洞大开,技能系统开发了一版并重构了一版后,目前暂且满意了。

  刚刚开发技能系统的时候,选择了快速开发的方式简单的对技能进行 分类 / 接口抽离 / 解耦 开发了。

  在Demo版出来后,发现功能的却是实现了,技能系统架构也还行,但逻辑层的代码太过于冗余,也不方便后期的扩展和维护。

  于是重写之,大概的重新分析了下技能的一些处理,比如使用技能开始,使用技能下发。

  根据以上分析和实际的开发中的心路历程将技能抽象为状态机之。写好了感觉也不是最好的方式不过按目前的需求足够了。

  之所以选择状态机是因为在现在的研发阶段好维护 / 好扩展,重构的话成本也不高。

Buff系统

  Buff系统总共就开发了两个类吧。因为这个比较简单。一个是 BuffNode 节点类,一个是 BuffManager 管理类。  

  每一个战斗对象会被绑定一个BuffManager管理类。这样就把每个对象自己的Buff都剥离开了。并且状态操作直接操作对象类就可以了。

战斗对象

  所有战斗中可以和其它对象交互的对象都统称为战斗对象。(可以为 英雄 / 弹道技能 / 甚至阻挡)

  战斗对象具有类型。对外提供抽象接口。提供统一的查询接口。外部操作都通过接口操作。

  该设计方便了后期的扩展和维护。

游戏规则

  对外提供规则管理接口,内部规则对管理接口提供内部规则操作接口。实现一接口操作多规则的构架。

  规则内部以状态机方式实现,实现在不同状态下的处理剥离。

MOBA服务器开发第一阶段完成总结的更多相关文章

  1. Java学习开发第一阶段总结

    前言: 按照学院的安排我专业应该在下学期学习Java课程,因为对技术的热爱,我选择了在本学期学习Java.俗话说得好“笨鸟先飞”,那我就先学习这门课程了. 第一阶段的学习总结: 在此次阶段任务相对比较 ...

  2. java课程之团队开发第一阶段评论

    1.没有UI设计,整体的样式感觉不堪入目 2.功能方面实现的并不是很多,还需要继续努力 3.还需要添加一些常用的课表功能,比如说导入课表等

  3. [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇)

    原文:[原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) .NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) 前言:接着上篇来. 系列文章链接: [ ...

  4. erlang 游戏服务器开发

    http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发  erlang大牛写的游戏服务器值得参考 介绍本文以 ...

  5. 我的新书《C++服务器开发精髓》终于出版啦

    一.千呼万唤始出来 亲爱的各位读者,我的新书<C++ 服务器开发精髓>终于终于终于与大家见面了,图书如下: 图书的封面设计很精美,当然内容一定不负众望.因出版社老师要求提供一张照片放到封面 ...

  6. PHP四个阶段目标以及第一阶段学习内容

    PHP课程体系主要分为四个阶段,第一阶段讲的是网页HTML和数据库MySQL,第一阶段要学会网页制作的基础知识,熟用各种基本标签,对数据库进行操作,各项考核都能够达标,拿出出众的项目展示. 在第二个阶 ...

  7. Bete冲刺第一阶段

    Bete冲刺第一阶段 今日工作: github团队协作流程 web:调整dao层设计,增加新的dao组件 客户端:之前遗留的界面跳转的BUG 目前所遇问题: 第一,COCOAPODS的安装上还是有点问 ...

  8. linux服务器开发浅谈

    [开发前准备] 在进行linux服务器开发之前,必须很清楚地了解所开发的对象需要考虑的相关问题比如:功能架构:提供服务的模块体系结构稳定性:服务器的出core率,内存泄露情况性能:请求与返回的速度与正 ...

  9. Akka.net开发第一个分布式应用

    Akka.net开发第一个分布式应用 系列主题:基于消息的软件架构模型演变 既然这个系列的主题是”基于消息的架构模型演变“,少不了说说Actor模型.Akka.net是一个基于Actor模型的分布式框 ...

随机推荐

  1. CodeForces801-A.Vicious Keyboard-暴力

    A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. UVA 1584 字符串

    VJ 该题 链接  https://vjudge.net/problem/UVA-1584 AC代码   字典序最小输出 #include <stdio.h> #include <m ...

  3. dijk

    .....................用矩阵存..................... 1 int mp[N][N]; bool p[N]; int dist[N]; void dijk(int ...

  4. D. Longest Subsequence

    D. Longest Subsequence time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  5. android狼人杀源码,桌面源码,猎豹快切源码

    Android精选源码 android实现狼人杀app源码 android实现精心打造的Android基础框架源码 android热门电影的客户端源码 android 实现桌面的Launcher源码 ...

  6. c语言_FILE结构体解释及相关操作

    1. 文件和流的关系 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件 ...

  7. UEP-标签

    这里的标签都是常用不好理解的: formatfunc="showFormatNumer" 显示数字在页面上 ockedcolumnnum="6" 几列是不动的 ...

  8. C++ 初始化列表(转)

    转载自:http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html 何谓初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函 ...

  9. 从零开始学习前端JAVASCRIPT — 5、JavaScript基础BOM

    1:BOM(Browser  Object  Model)概念 window对象是BOM中所有对象的核心. 2:window属性(较少用) self:self代表自己,相当于window. windo ...

  10. ASP.NET core1.0 EF MYSQL搭建中碰到几个问题记录

    1.No executable found matching command "dotnet-ef"   看了网上各种办法都没用,最后选择"个人用户账户"创建项 ...