跳到主要内容

概览

1. 为什么要使用扩展架构

尽管 PGOS 提供了许多游戏服务来帮助您构建精彩的游戏,但我们无法为您实现所有功能和后端逻辑。我们认为,一个设计良好的扩展架构将增强游戏在线服务的功能,并使其更加灵活。我们希望您能够以自己的方式处理任何事件,并创建自己的服务,使其能够与 PGOS 服务以及您自己的客户端和DS进行交互。此外,您还可以通过在 PGOS Web 门户上配置事件处理程序和 WebHook 来通知位于 PGOS 之外的您自己的服务器。所有这些操作都可以通过一个轻量级框架快速完成。您只需使用您喜欢的语言编写服务器代码即可。剩下的工作将由 PGOS 后端自动完成。

2. Virtual Server

2.1 什么是Virtual Server

Virtual Server是 PGOS 提供的一项扩展服务,允许开发者通过编写代码来扩展功能并实现定制化功能。Virtual Server的本质是开发者创建 Web 服务器,并将其部署并运行在 PGOS 提供的容器运行时平台上。为了编排和管理开发者编写的Virtual Server,PGOS 使用 Knative 框架,并确保不同 Title Region 下的Virtual Server之间相互隔离。

2.2 架构

image_16342811995562

Virtual Server包含以下几个层级:

  • 工具层

    • 开发工具:支持在线编辑、上传和提交代码。
    • CI/CD 流水线:支持持续集成和自动化部署。
  • 应用层

    • 后端 API:提供对后端 PGOS 服务的访问。
    • 存储:后端数据存储,包括玩家数据和游戏区域配置数据。未来 PGOS 还将支持存储自定义游戏数据
    • 环境变量:运行时环境变量的配置。
  • 基础层

    • 监控:监控Virtual Server的运行状态。

    • 统计:显示Virtual Server的运行状态和统计信息,包括调用次数、并发次数和错误次数。

    • 日志:允许查询Virtual Server的运行日志。

  • 核心层

    • 运行:目前,PGOS 使用 Google KNative。

2.3 触发Vritual Server

1615717014628

Virtual Server可以通过以下方式访问:

  • Task:在 Web 门户上配置计划任务以触发特定的Virtual Server功能。
  • Event:配置带有过滤条件的事件处理程序以触发特定的Virtual Server功能。
  • 游戏(客户端/DS):使用 PGOS SDK 触发特定的Virtual Server功能。
  • Web 门户:通过 Web 门户手动触发特定的Virtual Server功能。

3. Events

3.1 什么是事件

当某些事件发生时,就会生成一个Event。例如,当玩家登录时,就会生成 event_player_login_pgos。触发事件时,可以执行一个或多个操作。这些操作可以与特定的Virtual ServerWebhook绑定,当相应事件触发时,这些操作就会被执行。您可以在Web 门户中配置它们。

3.2 Event Actions

"Event-Handler-Action" 概念模型如下图所示。

image-20210108155004195

  • 一个事件中可以配置一个或多个handler。
  • 一个handler可以包含一个过滤器和一个或多个Actions。
  • 过滤器是一组带有条件表达式的逻辑判断。
  • Action必须是Virtual Server Function。只有当过滤器为 TRUE 时,Action才会被触发。

3.3 Filter

过滤器由条件表达式的“AND”和“OR”逻辑判断组成,如下所示:

image-20210312211428952

3.4 文档

更多细节,请参考 Events 文档。

4. WebHook

4.1 什么是 Webhook

Webhook 是一种“用户定义的 HTTP/HTTPS 回调”,可以设置为事件的Action,由事件触发。

5.2 文档

更多细节,请参考 WebHook 文档。

5. Tasks

5.1 什么是任务

任务会在指定时间自动执行特定的操作。

任务执行预定义的Virtual Serverfunction来实现特定的操作。

PGOS 提供精确到的 crontab 表达式。开发者可以使用 crontab 表达式来精确定义任务的触发时间。crontab 表达式如下;点击此处了解更多

image-20210305155749179

5.2 文档

更多细节,请参考 Task 文档.