MOBA作为竞技类的游戏,游戏中实时高精度同步,或者又说延迟容错率的要求还算是比较高的一种。

如何做到这种同步机制呢?

常用的同步机制有两种类型:帧同步 / 指令同步

何谓帧同步?

保证双方客户端逻辑运算结果高度一致的情况下,服务器只做消息转发的方式来驱动游戏的一种模式。

即:服务器没有具体逻辑 只做帧数据的下发 / 保存 / 检测。

客户端持有游戏的所有战斗逻辑 / 战斗数据。根据每个客户端的逻辑结果相同的机制来保证游戏内容的一致性。

何为指令同步?

是一种以服务器逻辑为标准来驱动游戏的一种模式。大多数时候客户端只做表现 / 和发送用户指令。

即:服务端持有游戏所有逻辑,对游戏拥有绝对的权力。

客户端主要接收用户的指令 提交到服务器,收到服务器处理结果进行表现。

这两种模式的一些比较?

帧同步:

1.对开发的要求非常高,且测试过程非常艰难。

2.而且对网络的消耗也要求比较高。并且对断线重连的支持非常不友好,也不支持中途加入游戏操作。

3.帧同步确实能保证游戏的高度一致性。

4.在架构完善后 对开发者很友好。

5.服务端不用处理游戏的具体逻辑。

指令同步:

1.对开发的要求不高,测试过程也比较友好。

2.对网络的消耗也可以做到最低,把控性也高,可以给玩家做延迟补偿等,对断线重连 / 中途加入也有非常好的支持。

3.游戏的一致性支持也很好。只是比起帧同步要处理的细节更多。

4.从开发的线条来说,二手手机号码购买刚开始要做结构,后面就是要完成具体逻辑,双向开发,比起帧同步成本还是比较高的。

5.服务端客户端都需要一套游戏的具体逻辑进行双向校验。

最近在做一个moba类的项目。主要负责战斗服务器这块,因为之前做过一段时间的 IO 游戏,最早也做过 RPG 游戏,对同步这块一直也没总结过,所以特开此页进行总结。

本次用到的一些技术体系和点具体内容:

1.【语言选择】语言选择决定了开发的效率,后期维护的成本。选择一门适合当前这种应用的语言应该是开发的第一步了。本次开发我们选择了 Golang。因为 Golang 的支持库很完善,语法简洁,对并发的支持性好。开发效率可以说非常高了。

2.【 UDP + KCP 】通讯方式的转变,最早的时候做这种同步的 RPG 基本也就是 TCP 协议了。在最近做 IO 的时候,领导提出了一种更好的方式 UDP + KCP 并且针对于 TCP 进行了测试,实际得到的性能和传输效率确实比 TCP 要高出很多,唯有一点就是会增加网络传输的数据量。事实证明这是一种拿数据流量换性能的模式,但在当下的网络环境里几乎可以忽略不计。

3.【指令同步 + 逻辑帧】指令同步中使用逻辑帧的模式,之所以帧同步能保证游戏的高度一致,是因为它确定了消息的发送开始位置,也保证了玩家执行消息的顺序以及逻辑结果的一致性。而这里的逻辑帧概念也相差不大,服务器缓存一个逻辑时间的指令消息,也就是一次性处理一个逻辑帧的指令消息,然后下发所有结果。这样能保证客户端在基于逻辑帧消息上的执行结果相同,也提高了一致性,在忽略延迟偏差的情况下 它们的执行结果也应该是相同的。

4.【 TCP + UDP 】连接模式组合,因为使用了 UDP + KCP 来提升网络中的传输效率,以保证客户端在相差不大的时间戳里接收到消息。但 UDP 是一种无连接协议,它以报文的方式进行传输,并且存在丢包的几率。所以考虑到以上 加入 TCP 连接来做 PING / PONG 这种校验连接正确性的操作,同时也用在一些不频繁的消息上,以减轻数据传输量以及丢包的几率。

暂时记录了这些 比较细的东西我之后会挑选一些接触到的来记录,然后形成一个服务器开发的类别吧。

MOBA游戏战斗服务器设计思路相关推荐

  1. 安卓手机游戏的识别码设计思路

    通常安卓手机用作识别码的有IMEI.MAC.Android ID.但是这几个值在虚拟器上面都是可以改的,有些虚拟器的IMEI值就是空或者都是一样的,特别是到了后面的安卓版本,玩家是可以不允许APP获邓 ...

  2. 推箱子游戏的java设计思路_用JAVA实现一个推箱子游戏

    技术应用 TECHNOLOGY AND MARKET Vol. 26,No. 2,2019 用 JAVA 实现一个推箱子游戏 马寅璞1,孔阳坤2 ( 1. 南京信息工程大学计算机软件学院物联网工程 1 ...

  3. 基于内存,redis,mysql的高速游戏数据服务器设计架构

    1.数据服务器详细设计 数据服务器在设计上采用三个层次的数据同步,实现玩家数据的高速获取和修改. 数据层次上分为:内存数据,redis数据,mysql数据 设计目的:首先保证数据的可靠,防止数据丢失, ...

  4. 并发服务器设计思路,参考apache学习UDP和QoS,研究成果

    研究了快1个月的服务器架构,把研究成果记录一下. 参考的有:Apache  vlc  ACE  ftp 我主要需要其中的并发处理,内存管理,TCP/UDP.QoS,速度限制等方面的内容,所以着重说这几 ...

  5. Go游戏服务器开发的一些思考(三十):排行榜服务器设计思路

    排行方式 通常有2类排行: 全服所有人排名 前N名排名 考虑到大量用户的情况下,实时全服排名难度很大,一般可以做成离线排名的方式. 这里考察的是大量用户的情况下,前N名的实时排名方法. 背景假设 这里 ...

  6. 游戏开发:Html5版宝可梦 Pokémon 游戏制作与设计思路分享(二)地图编辑器

    经过不懈的努力,终于迎来了更新,还会继续更新后续内容. 可能会加一些魔改的功能和玩法--^ ^ 大家可以一起讨论有趣思路 更新已完成的功能: 1.地图编辑器 2.角色移动碰撞检测 . 新实现的功能和大 ...

  7. 游戏开发(十三) 之 塔防 炮塔技能设计思路

    继续上一篇内容,这次说塔防类型游戏的炮塔设计思路 图片压缩gif的时候有问题..但是可以将就看. 这里我一共实现了5种炮塔的攻击: 单体暴击 范围群攻 毒液 减速 整排攻击 先说下我之前见过的这类游戏 ...

  8. appstore收入分析及策略类游戏的战斗设计

    分析appstore排行榜上中国区的数据,畅销榜上的游戏按类型基本如下: 策略类 〉模拟经营 〉RPG(自动战斗型)〉养成 〉动作 〉休闲 可以看出,移动平台游戏在收入方面与页游有着高度的一致性.成功 ...

  9. 塔防小游戏的开发设计经历

    前段时间微信朋友圈里微信经常向我推塔防小游戏,一时心血来潮,研究了下这类小游戏的开发设计,仿造了经典塔防游戏<Field Runner>.文章在其它平台发表过,为了让更多同学可以看到,作者 ...

最新文章

  1. autowired java_Java 基础之Autowired 是否是自动注入
  2. Django基础知识
  3. spring_Spring Boot应用程序浪费了内存
  4. Java布尔类的compareTo()
  5. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——3.3 小结...
  6. 交通银行签约第四范式,建设全行级统一AI能力平台
  7. 安装Win7时出现“安装程序无法创建新的系统分区……”的解决办法
  8. pythonweb框架使用教程_Django视频教程 - 基于Python的Web框架(全13集)
  9. 大一大学计算机考试难吗,新生必看!大一期间必考的3个证书,不考后悔,越拖越难考!...
  10. linux性能调优干货,【干货分享】详解Linux性能调优之tuned特性
  11. Microsoft Office 2016 简体中文Vl批量官方授权版镜像下载
  12. [转]WebQQ登录过程分析
  13. 什么是免备案虚拟主机?阿里云国际版云服务器给你答案
  14. 计算机考试自动填充,Excel函数自动判断、填充信息
  15. 计算机教师成绩分析总结与反思,成绩分析总结与反思
  16. iPhone6S安装XY助手提示未受信任的企业级开发者
  17. Android--- Drawer and Tab Navigation with ViewPager
  18. 练习-CTF解题 - XMAN比赛 8-8-babyweb(netspark扫扫)
  19. UNI-APP隐私政策问题无法上架
  20. New 900 Sentences

热门文章

  1. 印度帮是如何统治硅谷的?
  2. 车辆信息c语言,用c语言编的车辆管理
  3. 穷举法python例子_(Python)简单线性模型与穷举优化,穷举法
  4. Python爬虫爬取马蜂窝北京景点信息
  5. linux下怎样快速截图工具栏,ubuntu中截图工具及快捷键设置
  6. 怎么在html中加入文字,如何在指定的地方插入html内容和文本内容
  7. [USACO09OCT]木瓜的丛林Papaya Jungle
  8. (附源码)springboot幼儿园幼儿基本信息管理系统设计与实现 毕业设计201126
  9. 2022-07-15 第八组 于凤琳 Java算法+数据结构
  10. ImageNet数据下载