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模型的分布式框 ...
随机推荐
- BZOJ 3105: [cqoi2013]新Nim游戏
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题意是要取一些数使得剩余的数xor和的子集不为0 拟阵.求解极大线性无关组.贪心从大到小 ...
- hdu_1014(竟然真的还有更水的)
注意输出就没了... #include<cstdio> #include<cstring> using namespace std; int gcd(int a, int b) ...
- HDFS(数学题)
题目连接:http://acm.tju.edu.cn/toj/showp.php?pid=4119 4119. HDFS Time Limit: 5.0 Seconds Memory Limi ...
- Django App(三) View+Template
接着上一节(二)的内容,首先启动站点,通过界面添加Question和Choice两张表的数据,因为接下来,要向polls app里面添加views. 1.添加数据如下(这里是通过界面操作添加的数据) ...
- grunt 插件开发注意事项
grunt的插件机制 task.loadNpmTasks = function(name) { var root = path.resolve('node_modules'); var tasksdi ...
- 10年java过来人聊聊自己的自学、培训和工作经历
一 . 自我介绍 我叫王涛,我是一位北漂十年的码农,2008年9月份开始自学java,三个月后,自学无果,于2008年11月份开始参加培训,培训完之后,我觉得自己还是啥也不会,只会抄抄代码,竟然连de ...
- 织梦DedeCms获取当前页面URL地址的调用方法
织梦内容页如何调用当前页面url?相信很多对织梦感兴趣的朋友都会去考虑这个问题:在文章内容中加入本文链接,除了 保护自己版权外还可以增加网站的外链收录.网上这方面的帖子一搜一大堆,但多数都只能调用相对 ...
- vue集成百度UEditor富文本编辑器
在前端开发的项目中.难免会遇到需要在页面上集成一个富文本编辑器.那么.如果你有这个需求.希望可以帮助到你 vue是前端开发者所追捧的框架,简单易上手,但是基于vue的富文本编辑器大多数太过于精简.于是 ...
- Struts2 04--- 值栈 ognl(S标签)
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整 ...
- Flexible Box布局基础知识详解
1.基本概念,借用阮一峰老师的一张图: 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis).主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫 ...