PlayFab 游戏服务器基本信息

PlayFab 将游戏服务器作为容器化应用程序运行。 本教程介绍如何将游戏服务器打包并将其与 PlayFab 系统集成。

将游戏服务器容器化和打包

Windows

在 Windows 上,通常将游戏服务器可执行文件和其他文件打包为 zip 文件,然后作为游戏资源上传。 将资源与容器映像相结合来创建游戏服务器内部版本。 基本容器映像提供 Windows 操作系统文件,以及使游戏能够运行的执行环境。 PlayFab 提供一组托管容器映像,以用于 Windows 版本。 当通过 Game Manager 或诸如 CreateBuildWithManagedContainer() 等 API 创建 Windows 版本时,可以指定这些资产以及这些资产应在容器文件系统中安装的位置。 还可指定 Shell 命令以启动游戏 (StartGameCommand),这类似于下面的内容。

C:\GameCoreApp\GameServer.exe -mode RETAIL

当准备服务游戏客户端时,StartGameCommand 必须启动使用 PlayFab Game Server SDK 的应用程序才能调用 ReadyForPlayers。 当应用程序进程退出时,将终止和回收该容器。

Linux

在 Linux 上,你可以通过打包游戏可执行文件和资产来创建容器映像。 在运行时使用与容器映像组合的资产是可选的。 当通过 Game Manager 或诸如 CreateBuildWithCustomContainer() 等 API 创建 Linux 版本时,可以选择指定这些资产以及这些资产应在容器文件系统中安装的位置。 指定 Shell 命令来启动游戏 (StartGameCommand) 也是可选的,因为该命令也可以包含在容器映像中。

注意

有关为 PlayFab 多人游戏服务器创建 Linux 容器映像的详细信息,请查看

Windows 托管容器

PlayFab 当前支持一个托管容器;基于 Windows Server Core 的 PlayFab 多人游戏容器映像。 可通过 Docker Hub 下载此容器,以便使本地环境与 Azure 中的运行时环境相匹配。

有一些调试工具允许你在 Dev Box 上本地单步调试多人服务器状态机。

有关详细信息,请参阅本地调试游戏服务器,并与 PlayFab 集成

下图显示了上传游戏服务器并将此包与选定容器组合的关键流程。

Thunderhead 容器流

托管容器更新

托管容器是 Windows 项目中最简单的集成选项,如果不熟悉容器,这是一个很好的起点。

托管容器的一个关键功能是 PlayFab 将使用关键安全修补程序自动更新基础映像,以确保可靠地玩游戏。 通常每月都会进行安全更新,这应该不会导致服务中断。 有关详细信息,请参阅 Windows 操作系统修补程序更新

在升级过程中,自然回收的备用会话将替换为更新的容器映像和相同的游戏服务器包。

当 PlayFab 计划更新你正在使用的托管容器映像时,你将接收 PlayStream 事件。

集成 PlayFab Game Server SDK

有关详细信息,请参阅:将游戏服务器与 PlayFab Game Server SDK (GSDK) 集成

PlayFab Game Server SDK (GSDK) 是以多种编程语言提供的,如 C++C#Java。 GSDK 将游戏服务器连接到在虚拟机上安装的本地代理。 此代理可促进密钥服务器与 PlayFab 控件基础结构的交互。

Thunderhead GSDK

游戏服务器初始化后,将进入准备状态,并且 PlayFab 等待游戏服务器调用 ReadyForPlayers()

调用后,游戏服务器将进入备用状态,并通过 RequestMultiplayerServer 方法等待从匹配服务到 PlayFab 的分配请求。

下图显示了 PlayFab 多人游戏服务器的状态。

Thunderhead 游戏服务器状态

表面上,调用 ReadyForPlayers() 是让游戏服务器运行并继续运行的唯一要求。 但是,你可以处理几个回调/事件以获取最佳用户体验。

服务器脚本和 PlayFab 配置的环境变量

在某些情况下,你可以让游戏服务器运行 CMD、PowerShell 或 bash 脚本(一个“引导程序”),然后它们将启动已编译的游戏服务器可执行文件。 此脚本可配置容器内部环境,将命令行参数传递到可执行文件,或者你不想在游戏服务器可执行文件本身中执行的任何其他任务。

为方便起见,PlayFab 配置了一些内部版本信息作为容器中的以下环境变量。 这些也可通过 GSDK 访问,但通过脚本使用这些环境变量会更容易。

  • PF_TITLE_ID - 会话主机的游戏 ID
  • PF_BUILD_ID - 会话主机的内部版本 ID
  • PF_REGION - 会话主机的 Azure 区域
  • PUBLIC_IPV4_ADDRESS - VM 的公用 IP 地址
  • PF_VM_ID - VM 的唯一标识符 (如 'xcloudeau4u4yyxj4xymu:AustraliaEast:1E03_6f27ad88-9bc3-4ea3-8d16-75480aba4637:tvmps_0e05c37e0bbdca298a09fb0d597bd666eb7c5fd0ebcf1fed4c52e608a39a7c9c_d')
  • CERTIFICATE_FOLDER - 包含游戏证书的文件夹
  • PF_SERVER_LOG_DIRECTORY - 包含游戏日志的文件夹
  • PF_SERVER_INSTANCE_NUMBER - 服务器的实例编号。 VM 上的第一个服务器为 0,第二个服务器为 1,第三个服务器为 2,以此类推。