包装器示例

包装器示例(也称为 wrappingGsdk)可包装现有游戏,使其可用于使用 Windows OSLinux OS 的游戏服务器的内部版本部署。

通过使用包装器应用程序,你还可以在 PlayFab 多人游戏服务器上使用游戏服务器内部版本。

重要

包装器是一种解决方法,它通过处理标准输出和错误流来调用 GSDK 方法,不适用于生产用途。

示例内容

此示例由两个 .NET Core 控制台应用程序组成。

  • 包装器——将 PlayFab 游戏服务器 SDK (GSDK) 的最新 NuGet 包与游戏服务器集成。 此包装器应用程序不适用于生产用途
  • Fakegame——不了解 GSDK 的基本游戏服务器。 它与你在使用 PlayFab 多人服务器之前拥有的典型游戏服务器类似。 它会启动侦听 TCP 端口 80 的 ASP.NET Core Web 服务器 Kestrel。 它旨在模拟一个完全没有 GSDK 知识的游戏服务器。 如果你没有自己的游戏服务器,则可以使用它。 它有两个我们可以使用的 GET 路由,/hello 用于获取简单的响应,/hello/terminate 可以终止服务器。

要求

注意

为了使用和查看 PlayFab 多人游戏服务器,需要从 Game Manager 中启用该功能。 有关说明,请参阅启用 PlayFab 服务器功能

操作实例

有关生成此示例的实时演练,请查看我们在 Microsoft Game Dev 2021 中的演示(从大约 2:52 处开始):

获取并生成包装器可执行文件

  • 使用标准 Git 方法获取 GSDK 包装器示例或将其下载为 zip 文件
  • 打开命令提示符,并使用 cd 命令将目录路径更改为 wrapper.csproj 文件位置。 示例:cd C:/ReplaceWithYourFilePath/wrappingGsdk/wrapper
  • 然后运行以下 .NET Core CLI 命令:
dotnet publish --self-contained -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true

当包装器内部版本成功生成时,可执行文件将发布在 .\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish 文件夹中,如下图所示。

包装器可执行文件的发布位置

创建游戏服务器资产

有两种方法可以创建游戏服务器资产。

将 Fakegame 游戏服务器与包装器配合使用

使用 build.ps1 来生成和打包两个项目(包装器和 fakegame)。 此脚本将创建一个放置文件夹,其中包含包含所需文件的 .zip 文件。

  • 打开 PowerShell
  • 使用 cd 命令将目录路径更改为 build.ps1 脚本位置。 示例:cd C:/ReplaceWithYourFilePath/wrappingGsdk/
  • 运行 \build.ps1
  • 成功运行脚本后,转到 .\wrappingGsdk\drop\ 文件夹。 你将找到一个 gameassets.zip 文件,其中包含 FakeGame 服务器内部版本、包装器可执行文件(在前面的步骤中生成)和其他所需文件。

将你自己的游戏服务器文件与包装器配合使用

若要在评估中使用你的游戏项目,请将包装器与你的游戏服务器可执行文件放在同一个文件夹中。

  • 按照生成包装可执行文件中的说明进行操作
  • 转到包装器发布位置 .\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish
  • 在另一个窗口中,转到你的游戏服务器内部版本和运行游戏服务器内部版本所需的文件。 如果不确定需要哪些文件,请参阅确定所需的 DLL 文件
  • 将玩家服务器内部版本和所有必需文件复制到包装器发布位置
  • 选择包装器发布位置中的所有文件
  • 选择所有文件后,右键单击并选择“发送到”>“压缩 (zip) 文件到 zip”。 请勿选择包装发布文件夹并将其添加到 zip。 这会导致映射不正确。

提示

若要进行交叉检查,请按照 使用带有包装器的 Fakegame 游戏服务器中的说明生成 gameassets.zip 并将其用作参考。

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

若要创建 Linux 容器映像,则需要 Dockerfile。 Dockerfile 是一个没有扩展名的文本文件,包含生成给定容器映像所需的所有命令。 在此示例中,已为你创建此文件。 只需生成容器映像并运行它即可。

如果要使用 Windows 开发设备,则需要安装适用于 Linux 的 Windows 子系统 (WSL)。 下面提供了相关说明。 有关详细信息,请参阅 Windows 和 Linux 容器映像差异

  1. 设置 Windows 开发设备(可选)
  2. 获取 PlayFab 容器注册表登录凭据
  3. 使用现有/创建自己的 Dockerfile 此步骤有所不同,具体取决于你使用的是 FakeGame 还是你自己的游戏服务器。
    • 如果使用的是 FakeGame,请检查是否具有 Dockerfile
    • 如果你正在使用游戏或需要创建 Dockerfile,请参阅 创建 Dockerfile。 可以从使用 FakeGame 的 Dockerfile 开始。
  4. 打开安装了 Docker 的 Linux 终端,如 Ubuntu。 将 TAG 和 ACR 变量的值替换为你的值。 然后运行以下命令。
TAG="0.1"
ACR="customer5555555.azurecr.io"
docker login ${ACR}

提示

若要检查 ACR 和 TAG 变量是否已正确定义,请运行 echo $ACRecho $TAG

  1. 输入从前面的步骤中获取的用户名和密码。
  2. 生成和上传 Linux 容器映像。

运行以下命令以生成并上传 Dockerfile。 docker build 命令末尾有一个“.”。 你必须位于 Dockerfile 所在的文件夹/目录中。 有关详细信息,请参阅生成和上传 Linux 容器映像

docker build -t ${ACR}/wrapper:${TAG} .
docker push ${ACR}/wrapper:${TAG}

使用 Game Manager 或 API 部署内部版本

Windows 和 Linux 游戏服务器的内部版本部署流程相似。

部署 Windows 游戏服务器

这些步骤与 Windows 运行程序 C# 示例类似。 执行这些步骤,并注意下列差异。

如果你希望在本地进行测试,请参阅本地调试游戏服务器,并与 PlayFab 集成

特定于此示例的设置

  • 启动命令:
    • 使用 C:\Assets\wrapper.exe -g C:\Assets\fakegame.exe arg1 arg2
    • 如果你使用的是游戏服务器内部版本,请将 fakegame.exe 替换为游戏服务器可执行文件的名称
  • 网络配置:名称:游戏端口,端口:80,协议:TCP
  • 资产:使用 FakeGame 时,请将 gameassets.zip 作为资产上传。

部署 Linux 游戏服务器

按照以下一般步骤进行部署。

特定于此示例的设置

  • 选择上传的容器
  • 网络配置:名称:游戏端口,端口:80,协议:TCP
  • 无需上传资产并设置启动命令

注意

使用 RequestMultiplayerServer API 进行分配时,连接的端口将不是 80。 这是因为 PlayFab 多人游戏服务器服务将在 Azure 负载均衡器(将你的端口公开到公共 Internet)与在 Azure 虚拟机上运行的游戏服务器之间创建映射。

使用 LocalMultiplayerAgent 运行包装器

如果你希望在自定义游戏服务器上测试 GSDK 集成,强烈建议你使用 LocalMultiplayerAgent。

如果要将 LocalMultiplayerAgent 与 Windows 容器配合使用,则需要正确配置 MultiplayerSettings.json 文件。 下面提供了一个示例,请特别注意 LocalFilePath 和 StartGameCommand 的值。 别忘了将 fakegame.exe 替换为游戏服务器可执行文件的名称。

"AssetDetails": [
    {
        "MountPath": "C:\\Assets",
        "SasTokens": null,
        "LocalFilePath": "C:\\projects\\gsdkSamples\\wrappingGsdk\\drop\\gameassets.zip"
    }
],
"StartGameCommand": "C:\\Assets\\wrapper.exe -g C:\\Assets\\fakegame.exe",

// if you are using fakegameserver you should also configure port mapping for port 80
"PortMappingsList": [
            [
                {
                    "NodePort": 56100,
                    "GamePort": {
                        "Name": "gameport",
                        "Number": 80,
                        "Protocol": "TCP"
                    }
                }
            ]
        ]

现在即可使用 LocalMultiplayerAgent 进行测试。 如果配置正确,只要 LocalMultiplayerAgent 启动你的游戏服务器,你就可以通过 curl 在 http://localhost:56100/Hello 连接到它。

如何连接到 MPS 上的游戏服务器

若要与 MPS 上的游戏服务器建立连接,必须确定相应的端口号。 此要求源于配置,其中多个虚拟机(每个虚拟机可能运行大量游戏服务器实例)在负载均衡器后面进行管理。 在此类设置中,单个公共 IP 端口可能对应于这些虚拟机上的不同端口,每个端口都与不同的游戏服务器实例相关联。

使用 Game Manager

可以使用 Game Manager UI 分配游戏服务器并与之建立连接。

  1. 登录到 Game Manager
  2. 转到“多人游戏 => 服务器”页,选择生成
  3. 转到“服务器”页,然后单击“请求服务器”按钮。
  4. 在下一页上,记下公共 IPv4 地址端口
  5. 使用 curl 连接到 http://[IPV4Address]:[Ports->Num]/Hello。"

使用 MPS 分配器示例

下面介绍如何使用 MPS 分配器示例 分配游戏服务器并建立与游戏服务器的连接。

  1. 编译并执行 MPS 分配器示例。
  2. 应用“ListBuildSummaries”命令以查看可用的生成及其相应的生成 ID。
  3. 调用“RequestMultiplayerServer”以启动游戏服务器实例的请求。
  4. 将所选生成 ID 输入到“ListMultiplayerServers”命令中,以生成可用服务器的列表。
  5. 选择活动游戏服务器实例,然后将“GetMultiplayerServerDetails”与从前面步骤中获取的生成和会话 ID 结合使用。
  6. 记下响应中显示的 IPV4Address端口>Num
  7. 使用 curl 连接到 http://[IPV4Address]:[Ports->Num]/Hello

另请参阅