Skip to main content
Wrapper 示例(又名 wrappingGsdk)会对已有游戏进行包装,使其可用于部署基于 Windows OSLinux OS 的游戏服务器构建。 借助 wrapper 应用程序,你也能在 PlayFab Multiplayer Servers 上使用自己的游戏服务器构建。
wrapper 通过处理标准输出和错误流以调用 GSDK 方法的方式来实现变通,并不适用于生产环境。

示例内容

本示例包含两个 .NET Core 控制台应用程序。
  • Wrapper——将最新的 PlayFab Game Server SDK (GSDK) NuGet 包与你的游戏服务器集成。此 wrapper 应用程序不适用于生产环境
  • Fakegame——一个对 GSDK 一无所知的基础游戏服务器。它就像你在使用 PlayFab Multiplayer Servers 之前所拥有的典型游戏服务器。它启动 ASP.NET Core Web Server Kestrel,监听 TCP 端口 80。旨在模拟一个完全不了解 GSDK 的游戏服务器。如果你没有自己的游戏服务器,可以使用它。它提供了两个可用的 GET 路由:/hello 用于获取简单响应,/hello/terminate 用于终止服务器。

要求

为了使用和查看 PlayFab Multiplayer Servers,你需要在 Game Manager 中启用该功能。相关说明请参阅 启用 PlayFab Server 功能

演练

如需观看构建本示例的完整演示,请查看我们在 Microsoft Game Dev 2021 上的演讲(从大约 2:52 开始):

获取并构建 Wrapper 可执行文件

  • 使用标准 Git 方法或以 zip 文件方式下载 GSDK wrapper 示例
  • 打开命令提示符,使用 cd 命令切换到 wrapper.csproj 文件所在目录。例如:cd C:/ReplaceWithYourFilePath/wrappingGsdk/wrapper
  • 然后运行以下 .NET Core CLI 命令:
当 wrapper 构建成功后,可执行文件会发布到 ..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish 文件夹中,如下图所示。

创建游戏服务器资产

创建游戏服务器资产有两种方式。

将 Fakegame 游戏服务器与 wrapper 一起使用

使用 build.ps1 构建并打包两个项目(wrapper 与 fakegame)。此脚本会创建一个 drop 文件夹,其中包含一个 .zip 文件,里面包含所需文件。
  • 打开 PowerShell
  • 使用 cd 命令切换到 build.ps1 脚本所在目录。例如:cd C:/ReplaceWithYourFilePath/wrappingGsdk/
  • 运行 \build.ps1
  • 脚本运行成功后,前往 ..\wrappingGsdk\drop\ 文件夹。你会看到已生成一个 gameassets.zip 文件,其中包含 fake 游戏服务器构建、之前步骤中构建的 wrapper 可执行文件以及其他所需文件。

将你自己的游戏服务器文件与 wrapper 一起使用

若要在评估中使用你自己的游戏项目,请将 wrapper 与你的游戏服务器可执行文件放在同一文件夹中。
  • 按照 构建 wrapper 可执行文件 的说明操作
  • 前往 wrapper 发布位置 ..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish
  • 在另一个窗口中,前往你的游戏服务器构建及其运行所需的文件所在位置。如果不确定需要哪些文件,请参阅 确定所需的 DLL 文件
  • 将游戏服务器构建及所有所需文件复制到 wrapper 发布位置
  • 选中 wrapper 发布位置中的所有文件
  • 全选后右键,选择 发送到 > 压缩(zipped)文件夹。不要选择 wrapper 发布文件夹再压缩,否则会导致映射错误。
为进行交叉核对,请按照 将 Fakegame 游戏服务器与 wrapper 一起使用 的说明构建 gameassets.zip 并将其作为参考。

创建并上传 Linux 容器镜像(仅适用于 Linux 服务器)

要创建 Linux 容器镜像,你需要一个 Dockerfile。Dockerfile 是一个无扩展名的文本文件,包含构建给定容器镜像所需的所有命令。在本示例中,该文件已为你创建好。你只需要构建并运行容器镜像。 如果你希望使用 Windows 开发设备,则需要安装 Windows Subsystem for Linux (WSL)。下面提供了相关说明。更多信息请参阅 Windows 与 Linux 容器镜像的差异
  1. 配置你的 Windows 开发设备(可选)
  2. 获取你的 PlayFab 容器注册表登录凭据
  3. 使用现有的/创建你自己的 Dockerfile 此步骤根据你使用 FakeGame 还是自己的游戏服务器而有所不同。
  4. 打开安装了 Docker 的 Linux 终端(例如 Ubuntu)。将 TAG 和 ACR 变量的值替换为你自己的值。然后运行以下命令。
要检查 ACR 和 TAG 变量是否已正确定义,运行 echo ACR__ 和 __echo TAG
  1. 输入你在上一步中获取的用户名和密码。
  2. 构建并上传 Linux 容器镜像。
运行以下命令来构建并上传 Dockerfile。docker build 命令末尾有一个 ”.”。你必须与 Dockerfile 位于同一文件夹/目录。详情请参阅 构建并上传 Linux 容器镜像

使用 Game Manager 或 API 部署构建

Windows 与 Linux 游戏服务器的部署构建流程类似。

部署 Windows 游戏服务器

步骤与 Windows Runner C# 示例类似。按照下列步骤操作,其中的差异如下所示。 如果你希望在本地测试,请参阅 本地调试游戏服务器及与 PlayFab 集成 本示例特有的设置
  • 启动命令:
    • 使用 C:\Assets\wrapper.exe -g C:\Assets\fakegame.exe arg1 arg2
    • 如果你使用自己的游戏服务器构建,请将 fakegame.exe 替换为你的游戏服务器可执行文件名
  • 网络配置:Name: gameport、Port: 80、Protocol: TCP
  • 资产:使用 FakeGame 时,将 gameassets.zip 上传为资产。

部署 Linux 游戏服务器

按照以下总体步骤进行部署。 本示例特有的设置
  • 选择你已上传的容器
  • 网络配置:Name: gameport、Port: 80、Protocol: TCP
  • 无需上传资产及设置 Start Command
使用 RequestMultiplayerServer API 分配时,你连接到的端口将不同于 80。这是因为 PlayFab Multiplayer Server 服务将在 Azure Load Balancer(将你的端口暴露到公共互联网)与运行在 Azure 虚拟机上的游戏服务器之间创建映射。

使用 LocalMultiplayerAgent 运行 wrapper

如果你希望在自定义游戏服务器上测试 GSDK 集成,强烈推荐使用 LocalMultiplayerAgent。 如果你在 Windows 容器中使用 LocalMultiplayerAgent,需要正确配置 MultiplayerSettings.json 文件。下面是一个示例,请特别注意 LocalFilePath 和 StartGameCommand 的值。别忘了将 fakegame.exe 替换为你的游戏服务器可执行文件名。
现在你已准备好使用 LocalMultiplayerAgent 进行测试。如果配置正确,一旦 LocalMultiplayerAgent 启动了你的游戏服务器,你就可以通过 curl 在 http://localhost:56100/Hello 连接到它。

如何在 MPS 上连接游戏服务器

要与 MPS 上的游戏服务器建立连接,必须先确定合适的端口号。这一要求源于以下配置:多台虚拟机(每台可能运行多个游戏服务器实例)由一个负载均衡器统一管理。在这样的架构下,一个公共 IP 端口可能对应这些虚拟机上的不同端口,每个端口对应一个不同的游戏服务器实例。

使用 Game Manager

你可以使用 Game Manager UI 分配一个游戏服务器并与之建立连接。
  1. 登录 Game Manager
  2. 前往 Multiplayer => Servers 页面,选择你的构建
  3. 前往 Servers 页面,单击 “Request server” 按钮。
  4. 在下一页中,记录公共 IPv4 addressPort
  5. 使用 curl 在 http://[IPV4Address]:[Ports->Num]/Hello 处连接。“

使用 MPS Allocator 示例

以下是使用 MPS Allocator 示例 分配游戏服务器并与之建立连接的方式。
  1. 编译并执行 MPS Allocator 示例。
  2. 使用 “ListBuildSummaries” 命令查看可用构建及其对应的构建 ID。
  3. 调用 “RequestMultiplayerServer” 请求一个游戏服务器实例。
  4. 将选择的构建 ID 输入到 “ListMultiplayerServers” 命令中,以生成可用服务器列表。
  5. 选择一个活动的游戏服务器实例,然后使用前面步骤中获得的构建 ID 与会话 ID 调用 “GetMultiplayerServerDetails”。
  6. 记录响应中显示的 IPV4AddressPorts->Num
  7. 使用 curl 在 http://[IPV4Address]:[Ports->Num]/Hello 处连接。

另请参阅

最后修改于 2026年8月25日