65.9K
CodeProject 正在变化。 阅读更多。
Home

不要从头开始构建游戏(第一部分):在 Azure PlayFab 上创建和部署多人服务器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2021年11月23日

CPOL

7分钟阅读

viewsIcon

7763

在本文中,我们将探讨如何打包然后将游戏部署到 Azure PlayFab 服务器。

Microsoft Game Stack 为各种规模的游戏开发者(从独立工作室到 AAA 团队)提供了构建和发布精彩游戏的工具和服务。在我之前的关于 Microsoft Game Stack 的系列文章 Azure for Game Developers 中,我们在 Azure 上构建的可扩展的实时多人游戏后端功能是“自己动手”实现的。但是,使用 PlayFab 这样的现成解决方案可以是一种更简单、更经济的选择。

使用 PlayFab 后端可以让工作室和游戏开发者将时间花在改进游戏玩法和机制上,而不是担心启动和扩展服务器。通过避免从头开始构建游戏的支撑基础设施,开发者可以缩短游戏的上市时间,并能快速将其发布给期待已久的游戏玩家。

在本系列的第一篇文章中,我将演示如何集成一个真实、功能齐全的多人游戏服务器。我将使用 PlayFab 多人游戏服务器按需自动扩展,并为匹配和组队等预构建的复杂服务做好准备。

我将向您展示如何将一个完全可玩的可开源多人贪吃蛇游戏打包,以部署到 Azure PlayFab 多人游戏服务器。我将使用 PlayFab Game Server SDK 包装游戏,将所有内容打包成一个 zip 文件,并配置 PlayFab 以根据需要自动将打包文件部署到虚拟机。您需要了解一些 Java 才能跟上本教程的进度。

请注意,本系列将仅使用 PlayFab 每月 750 个免费核心小时和 10 GB 的免费网络使用量中的一小部分,但您需要为您的帐户添加信用卡才能启用多人游戏服务器功能。

要求

要学习本指南,您需要一个 PlayFab 帐户,并在您的计算机上安装以下软件

下载多人贪吃蛇游戏代码

我们使用与上一个系列中相同的引人入胜的可开源多人贪吃蛇游戏,但我们将对原始代码进行最小的更改。如果您已经按照上一个系列进行了分叉,我建议为本指南创建一个新的分叉或下载原始存储库的副本。

因此,首先,将存储库下载并解压缩到计算机上的一个新文件夹中。

在 Visual Studio Code 中打开该文件夹,然后安装依赖项以进行测试并确保一切正常。我们通过使用键盘快捷键 Ctrl + ` 在 VS Code 中直接打开终端,然后输入 npm install 来完成此操作。

现在,使用命令 npm start 在本地运行项目,并在浏览器中以 https://:3000 打开游戏。您应该能看到并玩贪吃蛇游戏。

将代码编译成 Windows 可执行文件

接下来,我们将使用 Nexe 将我们的 Node.js 代码转换为 .exe 文件,以便直接在 PlayFab 的托管 Windows 容器上运行。PlayFab 尚未为 Node.js 环境提供 Game Server SDK,因此此步骤允许我们将代码包装在一个将在下一步中构建的 shell 进程中。

首先,在 VS Code 终端中使用命令安装 Nexe

npm install nexe –g

然后,运行以下命令进行测试并确保编译过程正常工作

nexe -i app.js -r public/** -o server.exe

此命令应生成一个 server.exe 可执行文件,您可以直接在终端中运行它来启动贪吃蛇游戏服务器。如果工作正常,您将在浏览器中看到相同的可玩游戏。

为 PlayFab 部署包装多人贪吃蛇游戏

PlayFab 为 C#、C++ 和 Java 环境提供了 Game Server SDK (GSDK),以便与它们的服务器无缝集成。由于我们的示例游戏是用 Node.js 编写的,我们将构建一个 C# 包装器来使用 GSDK 并单独运行服务器进程。但别担心 — 您不需要了解 C# 即可学习本指南。

让我们从 PlayFab 的示例包装代码开始。我们将对其进行修改以适用于贪吃蛇游戏。

首先,下载或克隆 PlayFab Multiplayer Server Samples 存储库,并将 wrappingGsdk 示例文件夹复制到您选择的目录中,以保留您的游戏服务器代码。

然后,删除 fakegame 文件夹并用您的贪吃蛇游戏文件夹替换它。我将我的文件夹命名为 snakegame,因为它押韵!

接下来,在 VS Code 中打开 build.ps1 PowerShell 脚本。删除或注释掉第 6 行中构建 fakegame 项目的命令,因为它已不存在。

然后,将以下脚本直接粘贴到您刚刚删除或注释掉的那一行下方。它将贪吃蛇游戏编译为 server.exe,并将三个目录递归地复制到 drop 目标文件夹。此项目需要 socket.io 客户端模块,如此 GitHub 问题所述。另外,如果您没有将文件夹命名为 snakegame,请注意您需要更改文件夹路径。

nexe --cwd $scriptRoot\snakegame -i app.js -r public\** -o $dropDir\w10x64\server.exe
Copy-Item $scriptRoot\snakegame\node_modules\socket.io-client -Destination $dropDir\w10x64\node_modules\socket.io-client -Force -Recurse
Copy-Item $scriptRoot\snakegame\app -Destination $dropDir\w10x64 -Force -Recurse
Copy-Item $scriptRoot\snakegame\public -Destination $dropDir\w10x64 -Force -Recurse

现在,您可以通过右键单击 build.ps1 脚本文件并选择 在 PowerShell 中运行,或者从 PowerShell 窗口运行它。此操作会将所有内容构建并打包到 drop 文件夹中的 gameassets.zip 文件中。如果脚本提示您进行 Execution Policy Change,请选择 [A] 全部是

在进行下一步之前,最好在本地进行测试,以确保您正确构建了贪吃蛇游戏。请在您的终端窗口中运行位于 drop/w10x64/ 文件夹中的 server.exe 可执行文件来完成此操作。检查您是否可以在浏览器中看到并玩游戏,地址为 https://:3000

部署到 PlayFab

现在到了有趣的部分。我们已准备好将服务器部署到 PlayFab 服务器。

首先,登录 PlayFab,如果您还没有工作室,请创建一个。然后,打开标题为 My Game 的占位符游戏。

导航到仪表板的 Build > Multiplayer 部分,并确保启用了 Multiplayer Servers 选项。您可能需要为您的帐户添加信用卡,尽管此示例仅使用少量免费的月度核心小时和网络使用量。

接下来,点击 New build 以配置一个新的游戏服务器构建。

指定一个 Build name,例如 Snake Game v1,并选择 Dasv4 (2 cores) 作为 Virtual machine,以符合 PlayFab 的免费评估核心小时。将您在上一步中生成的 gameassets.zip 文件拖放到 Assets 部分。

接下来,将以下内容设置为 Start command

C:\Assets\wrapper.exe -g C:\Assets\server.exe

然后,点击 + Add region 并选择 East USNorth Europe,具体取决于离您最近的区域,并将 Standby serversMax servers 都设置为 1。此数量允许 PlayFab 根据需要自动启动更多游戏服务器实例,以满足玩家对多人游戏对战的需求。

现在,在 Network 部分添加端口 3000 作为 TCP,并设置一个唯一的端口名称。然后,点击 Add build

此操作将开始为您的游戏设置一个备用服务器。几分钟后,构建状态应显示为 Deployed

现在您应该可以转到 Servers 选项卡,看到一个状态为 Running 的服务器。

点击服务器上的 Connect。您将看到虚拟机 (VM) 服务器的 IP 地址以及通过下载 RDP 文件直接通过 Remote Desktop 连接的选项。

由于 PlayFab VM 默认在端口 30000 启动,您可能只需打开浏览器访问该服务器地址的端口 30000 来检查服务器是否已充分部署,例如 http://ip-address:30000 (例如,http://20.185.73.214:30000)。

如果该测试不起作用,可能表明端口映射方式不同,并且您需要通过 Remote Desktop 连接。在远程桌面连接中,以 Administrator 身份打开命令提示符。运行 docker ps 以查看哪个端口映射到了游戏的 3000 端口,然后从您计算机的浏览器打开它。

如果这仍然不起作用,您可能没有正确打包游戏和包装器。您应该回顾上一步,包装贪吃蛇游戏。

下一步是什么?

现在我们已经打包并将自定义多人游戏服务器上传到 PlayFab,您可以看到 PlayFab 如何为您处理其余的繁重工作。PlayFab 会自动将代码部署到 VM 并根据需要进行扩展以满足玩家需求。这种 DevOps 和维护的便捷性可以节省大量精力,并缩短具有实时多人游戏功能的游戏的上市时间。

接下来,让我们让玩家使用 PlayFab 登录游戏。这样,我们就无需从头开始构建用户帐户系统和后端。加入我本系列的下一部分,我将向您展示如何为您的游戏添加 PlayFab 玩家身份验证

© . All rights reserved.