MOBA服务器开发第一阶段完成总结
开发历程
项目是从8月20日左右开始开发的,到今天一个月不到吧。
除了底层库和服务器架构外我们大致开发了5个服务器为:
一 ) . 战斗服务器
二 ) . 匹配服务器
三 ) . 验证服务器
四 ) . 网关服务器
五 ) . 游戏服务器
其中 战斗服务器 和 匹配服务器是我负责的 (确实撸的很爽 哈哈哈) :
在有一套成熟的框架体系下撸代码的体验就是快速稳定健全。
战斗服务器总结
战斗服务器是集群节点的配置。
为了提高服务器的容错和开发速度。我们把所有集群服务器都设置为单线程模式。允许一台服务器部署多个服务器。
战斗服务器主要处理游戏战斗中事务:
创建游戏房间
提供英雄选择 技能选择 皮肤选择
提供游戏过程支持(使用技能 / 请求移动 / 断线重连 / 游戏结算 / 游戏规则 / 战斗回放)
逻辑帧
我们在设计战斗服务器之初就定义好了游戏有逻辑帧的概念,同时客户端也遵循该逻辑帧的时间并且客户端的逻辑帧时间由服务器下发。
以此概念就能保证在大多情况下客户端和服务器的逻辑帧是相同的,有时候可能会出现指令有1-2帧的误差,但这并不影响,因为一个逻辑帧也就几十毫秒,玩家基本感知不到。(网络延迟不参与此处误差计算)
有了逻辑帧概念后,服务器只需要将收到客户端的所有请求信息全部压入队列。当下一个逻辑帧到达后将所有消息取出,依次处理并下发游戏消息。而客户端收到网络消息就只需做对应的播放就可以,也就是说客户端就算不请求服务器但是收到了服务器的下发消息也需要对该消息进行播放处理。
战斗回访
服务器可以借逻辑帧的概念将每帧下发的消息都存储到 redis 然后用于支持战斗回访。
技能系统
为了满足策划的脑洞大开,技能系统开发了一版并重构了一版后,目前暂且满意了。
刚刚开发技能系统的时候,选择了快速开发的方式简单的对技能进行 分类 / 接口抽离 / 解耦 开发了。
在Demo版出来后,发现功能的却是实现了,技能系统架构也还行,但逻辑层的代码太过于冗余,也不方便后期的扩展和维护。
于是重写之,大概的重新分析了下技能的一些处理,比如使用技能开始,使用技能下发。
根据以上分析和实际的开发中的心路历程将技能抽象为状态机之。写好了感觉也不是最好的方式不过按目前的需求足够了。
之所以选择状态机是因为在现在的研发阶段好维护 / 好扩展,重构的话成本也不高。
Buff系统
Buff系统总共就开发了两个类吧。因为这个比较简单。一个是 BuffNode 节点类,一个是 BuffManager 管理类。
每一个战斗对象会被绑定一个BuffManager管理类。这样就把每个对象自己的Buff都剥离开了。并且状态操作直接操作对象类就可以了。
战斗对象
所有战斗中可以和其它对象交互的对象都统称为战斗对象。(可以为 英雄 / 弹道技能 / 甚至阻挡)
战斗对象具有类型。对外提供抽象接口。提供统一的查询接口。外部操作都通过接口操作。
该设计方便了后期的扩展和维护。
游戏规则
对外提供规则管理接口,内部规则对管理接口提供内部规则操作接口。实现一接口操作多规则的构架。
规则内部以状态机方式实现,实现在不同状态下的处理剥离。
MOBA服务器开发第一阶段完成总结的更多相关文章
- Java学习开发第一阶段总结
前言: 按照学院的安排我专业应该在下学期学习Java课程,因为对技术的热爱,我选择了在本学期学习Java.俗话说得好“笨鸟先飞”,那我就先学习这门课程了. 第一阶段的学习总结: 在此次阶段任务相对比较 ...
- java课程之团队开发第一阶段评论
1.没有UI设计,整体的样式感觉不堪入目 2.功能方面实现的并不是很多,还需要继续努力 3.还需要添加一些常用的课表功能,比如说导入课表等
- [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇)
原文:[原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) .NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) 前言:接着上篇来. 系列文章链接: [ ...
- erlang 游戏服务器开发
http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发 erlang大牛写的游戏服务器值得参考 介绍本文以 ...
- 我的新书《C++服务器开发精髓》终于出版啦
一.千呼万唤始出来 亲爱的各位读者,我的新书<C++ 服务器开发精髓>终于终于终于与大家见面了,图书如下: 图书的封面设计很精美,当然内容一定不负众望.因出版社老师要求提供一张照片放到封面 ...
- PHP四个阶段目标以及第一阶段学习内容
PHP课程体系主要分为四个阶段,第一阶段讲的是网页HTML和数据库MySQL,第一阶段要学会网页制作的基础知识,熟用各种基本标签,对数据库进行操作,各项考核都能够达标,拿出出众的项目展示. 在第二个阶 ...
- Bete冲刺第一阶段
Bete冲刺第一阶段 今日工作: github团队协作流程 web:调整dao层设计,增加新的dao组件 客户端:之前遗留的界面跳转的BUG 目前所遇问题: 第一,COCOAPODS的安装上还是有点问 ...
- linux服务器开发浅谈
[开发前准备] 在进行linux服务器开发之前,必须很清楚地了解所开发的对象需要考虑的相关问题比如:功能架构:提供服务的模块体系结构稳定性:服务器的出core率,内存泄露情况性能:请求与返回的速度与正 ...
- Akka.net开发第一个分布式应用
Akka.net开发第一个分布式应用 系列主题:基于消息的软件架构模型演变 既然这个系列的主题是”基于消息的架构模型演变“,少不了说说Actor模型.Akka.net是一个基于Actor模型的分布式框 ...
随机推荐
- noip2015 提高组 解题报告
完美退役...说好的不卡常呢QAQ day1: T1:模拟题?..考察选手将题目描述翻译成代码的能力233 //其实真相是考验rp..论代码雷同的危害233 T2:简单图论,每个点出度为1所以是基环内 ...
- 初识LINUX之常见命令
玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...
- TCP为什么需要3次握手与4次挥手(转载)
为什么需要“三次握手” 在谢希仁著<计算机网络>第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”.在另一部经典的<计算机网络> ...
- UEP-多任务
打开多任务 Function testTabTask(){ openTabTask(","多任务测试",$$pageContextPath+"/componen ...
- [国嵌笔记][027][ARM协处理器访问指令]
协处理器作用 协处理器用于执行特定的处理任务,如数学协处理器可以执行控制数字处理,以减轻处理器的负担.ARM处理器最多可以支持16个协处理器,其中CP15是最重要的一个协处理器 CP15的作用 CP1 ...
- 织梦dedecmsV5.7联动类型无法显示的处理方法
最近织梦dedecms在新的功能中添加了一个联动类型这样的一个功能.所谓的联动类型,类似于一级目录下有二级目录,二级目录下又有三级目录,可以理解为数据结构中树形结构.级和级之间都是有着联系的.为了让大 ...
- PHPCMS模板里面使用自定义函数
首先我在/phpcms/libs/functions/extention.func.php里面新增了一个函数 ============================================= ...
- 一篇文章帮你解决python的包管理
写python代码的人都知道,一个项目写下下来,不可避免的都需要使用很多第三方包,通常我们都是通过pip install ,然而当我们需要上线的时候问题来了,如果中间你自己不记得自己安装了多少个包,这 ...
- Java之IO流学习总结【下】
2.字节流 |-- InputStream(读) |-- OutputStream(写) 由于字节是二进制数据,所以字节流可以操作任何类型的数据,值得注意的是字符流使用的是字符数组char[]而字节流 ...
- Python 3 生成手写体数字数据集
0.引言 平时上网干啥的基本上都会接触验证码,或者在机器学习学习过程中,大家或许会接触过手写体识别/验证码识别之类问题,会用到手写体的数据集: 自己尝试写了一个生成手写体图片的python程序,在此分 ...