Skip to main content

Client Engine 总览

info

在阅读本文档之前,请先阅读多人在线对战服务功能介绍MasterClient ,了解多人在线对战开发的基础结构。

Client Engine 解决了什么问题

多人在线对战服务(即下图中的 Multiplayer 服务)很好的解决了「房间」抽象与房间之间玩家交换消息的问题。我们以「剪刀石头布」游戏为例,游戏的流程是这样的:

image

其中 Multiplayer 服务扮演的是一个纯粹的消息转发角色,为了方便之后的讨论,我们可以把这个图简化一下(虚线代表消息是通过 Multiplayer 服务传递的):

image

这个流程很简单,但也存在一些问题:

  1. 所有的玩家都是一样的上帝视角,能看到所有的状态,后出拳的玩家(如图中的 B)可以根据 A 的选择对应出拳达到必胜的效果。
  2. 最终结果是由客户端上报的,客户端可以伪造结果上报。
  3. A 作为 MasterClient 可以操纵一些涉及随机的操作,例如洗牌、掷骰子等(「剪刀石头布」里并没有类似的机制)。

不同的游戏类型对于这些问题的容忍度是不同的。在不改变上图流程的前提下,这些问题也都能找到各自改进的方案。但 Client Engine 方案试图用一个釜底抽薪的方法解决这些问题:把 MasterClient 运行到服务端。在 Client Engine 方案里,游戏的流程是这样的:

image

在这个流程中,在服务端运行的 MasterClient 是唯一拥有上帝视角的裁判。所有玩家都只与 MasterClient 交换信息,MasterClient 只会给客户端同步部分信息(比如只告诉 B「A 出拳了」,但出了什么未知)。游戏逻辑的运算(包括随机、胜负判定)以及最终结果的上报都在服务端进行。

Multiplayer 服务是基础。玩家客户端并不与 MasterClient 直接通信,图中的虚线表示消息仍然是通过 Multiplayer 服务转发的。

Client Engine 介绍

Client Engine 是多人在线游戏 Client 托管方案。多人在线对战服务提供了 MasterClient 机制来控制游戏逻辑:MasterClient 是一个特殊的 Client,它接收和处理游戏内的所有事件与消息,进行实时处理之后将结果下发给其他游戏客户端,用以控制游戏向下执行。开发者可以基于多人在线对战的 SDK 开发出一套完整的 MasterClient 逻辑,继而将这样的「客户端」托管到 Client Engine,省去程序部署、运维的负担。如图所示:

image

除了 MasterClient 的托管外,开发者还可以在 Client Engine 中

  • 托管普通的虚拟玩家,增加游戏的趣味性和活跃度。
  • 自定义 REST API 来完成其他逻辑的开发。

将游戏逻辑托管在 Client Engine 有以下优势:

  • 网络延迟更低。游戏运行过程中涉及到「游戏玩家」-「多人对战云端」- MasterClient 三方非常频繁的消息交互, Client Engine 与多人对战云端处于同一物理网络,可以大幅减少公网的传输延迟。
  • 运维支持更成熟。Client Engine 提供了完善的日志收集、状态监控、负载均衡以及自动容错恢复机制,可以提供更高的稳定性保障。
  • 自由伸缩更有弹性。Client Engine 提供了庞大的资源池,可以快速响应单个游戏产品临时的、突发的扩容需求,无需手动调整实例,自动完成扩容。

文档及 Demo

详细的使用方式请参考文档:

示例 Demo:

价格

开发版

开发版下提供「体验版」供开发者免费使用:

  • 免费 100 CCU 和 50% CPU。
  • 不提供预备环境。
  • 不支持自动扩容及负载均衡。
  • 强制休眠。

休眠策略:

标准实例不会休眠。

体验实例会执行休眠策略:

  • 如果应用最近一段时间(半小时)没有任何外部请求,则休眠。
  • 休眠后如果有新的外部请求实例则马上启动。访问者的体验是第一个请求响应时间是 5 ~ 30 秒(视实例启动时间而定),后续访问响应速度恢复正常。
  • 强制休眠:如果最近 24 小时内累计运行超过 18 小时,则强制休眠。此时新的请求会收到 503 的错误响应码,该错误可在 云服务控制台 > Play > Client Engine > 统计 中查看。

如果不希望预备环境的体验实例因为强制休眠而中断服务,或需要多个实例来完整模拟生产环境,可以在预备环境根据需要购买标准实例。

商用版

商用版下可通过控制台从「体验版」升级到「标准版」,「标准版」提供预备环境,支持自动扩容及负载均衡,不会休眠。

「标准版」按照「计算单元」扩容与计费。一个计算单元包含 100 CCU 和 50% CPU,我们会在任意一个指标用尽的时候自动增加计算单元。例如在某一时刻 Client Engine 消耗了 80 CCU 与 90% CPU,则此时系统会为其分配 2 个计算单元。

系统会按照每天的计算单元用量峰值计费,单个计算单元的价格请参考官网。例如国内节点的一个应用某天最多使用了 2 个计算单元,当天收费为 2 * 国内计算单元价格。

info

注意:升级为「标准版」后不论是否使用,都会按照最低 1 个计算单元来提供服务并计费。