• MOBA战斗服务器设计思路


    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 这种校验连接正确性的操作,同时也用在一些不频繁的消息上,以减轻数据传输量以及丢包的几率。

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

  • 相关阅读:
    requireJS 简要介绍和完整例子
    SQL 语句递归查询 With AS 查找所有子节点
    ztree的添加、修改、删除及前后台交互
    JQuery-zTree.js使用范例
    CSS3自定义滚动条样式 -webkit-scrollbar
    jQuery插件定义
    JQuery 插件开发
    jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等
    Xml序列化
    wen7安装oracle 11g出现"未找到文件 E:development_toolsdatabaseoracleinstall_ddbhomeowbexternaloc4j_applicationsapplicationsWFMLRSVCApp.ear"
  • 原文地址:https://www.cnblogs.com/questionmark/p/7428776.html
Copyright © 2020-2023  润新知