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模型的分布式框 ...
随机推荐
- cf_514C(字符串哈希)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121897#problem/G Watto and Mechanism Time ...
- Codeforces Round #331 (Div. 2) _A. Wilbur and Swimming Pool
A. Wilbur and Swimming Pool time limit per test 1 second memory limit per test 256 megabytes input s ...
- Trees on the level(指针法和非指针法构造二叉树)
Trees on the level Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- oracle 11g体系结构
1.数据库体系结构 1.1 数据库和实例的关系database server = instance 实例 + database 数据库instance 实例 =内存 memory + 进程 pr ...
- include指令与include动作的区别(面试要考)
include指令: 语法格式:<%@ include file=" " ...%> 发生作用的时间:页面转换期间 包含的内容:页面的实际内容 转换成的servlet: ...
- Oracle:FOR循环语句练习
--打印输出从1到10的正整数DECLARE v_i NUMBER(10) := 0;BEGIN LOOP v_i := v_i + 1; DBMS_OUTPUT.put_line(v_i); EXI ...
- addslashes() 函数返回在预定义字符之前添加反斜杠的字符串
. 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL 提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串. 注释:默认地,PHP 对所有的 GET.PO ...
- WdatePicker设置时间区间时,对开始时间和结束时间限制
<input id="startDate" name="startDate" type="text" readonly=" ...
- Access是什么?
一种使用简单的数据库软件,非常实用! 是微软的一个小型数据库,是Microsoft office 中的一个组件. Access数据库能够进行数据表设计.可视查询设计.SQL查询语言.窗体设计.报表设计 ...
- VUE之ECMAScript6(es6)
es6:es:EMCAScript 6 (es2015)Emca:国际标准组织 1.常量和变量 const a = "hello" let:定义一个块级作用域的变量 需要先定义再使 ...