本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Session-based 带有无服务器后端的游戏服务器托管
在为游戏开发架构时,请考虑所需的特性和功能以及准备承担的运营管理开销水平。为了在易操作性和灵活性之间取得最佳平衡,您可以使用云提供商的托管服务来构建游戏。托管服务使您可以控制开发和自定义自己的自定义游戏功能,同时还可以减轻部署和管理基础架构的负担。
托管基于会话的多人游戏需要服务器基础架构来托管游戏服务器进程,以及用于配对和会话管理的可扩展后端。以下参考架构显示了如何使用亚马逊托 GameLift管主机和无服务器后端来管理基于会话的游戏。
亚马逊为基于会话的游戏托 GameLift 管托管
该图描述了让玩家进入在托 GameLift 管游戏主机上运行的游戏的过程。它包括以下步骤:
-
游戏客户端向亚马逊 Cognito 身份池请求亚马逊 Cognito 身份。可以选择将其连接到外部身份提供商。
-
游戏客户端接收临时访问凭证,并使用亚马逊 Cognito 证书对请求进行签名,从而通过亚马逊 API 网关请求游戏会话。
-
API 网关调用一个函数。 AWS Lambda
-
Lambda 函数从亚马逊 DynamoDB 表中请求玩家数据。Amazon Cognito 身份用于安全地请求正确的玩家数据,因为经过身份验证的身份是在请求上下文数据中提供的。
-
Lambda 函数使用正确的玩家数据获取更多信息(例如玩家技能等级),通过 GameLift FlexMatch 配对请求比赛。您可以使用配置文档定义 FlexMatch 配对 JSON-based配置。游戏客户端可以通过对各个区域的服务器端点执行 ping 操作来生成延迟指标,延迟数据可用于支持基于延迟的配对。
-
在将一组具有适当延迟的玩家 FlexMatch 匹配到某个区域后,它会通过 GameLift 队列请求游戏会话放置。该队列包含具有一个或多个注册区域位置的舰队。
-
当会话在队列的其中一个地点进行时,会向 Amazon SNS 主题发送事件通知。
-
Lambda 函数将接收亚马逊 SNS 事件并对其进行处理。
-
如果 Amazon SNS 消息是 MatchmakingSucceeded 事件,则 Lambda 函数使用服务器端口和 IP 地址将结果写入到 DynamoDB。生存时间 (TTL) 值用于确保在不再需要配对票证时将其从 DynamoDB 中删除。
-
游戏客户端向 API Gateway 发出签名请求,以在特定时间间隔内检查配对票证的状态。
-
API Gateway 调用 Lambda 函数来检查配对门票的状态。
-
Lambda 函数检查 DynamoDB 以确定票证是否成功。如果成功,Lambda 函数会将 IP 地址、端口和玩家会话 ID 发回客户端。如果票证失败,Lambda 函数会发送响应,声明匹配尚未准备就绪。
-
游戏客户端使用后端提供的端口和 IP 地址,使用 TCP 或 UDP 连接到游戏服务器。它将玩家会话 ID 发送到游戏服务器,游戏服务器使用 Amazon GameLift Server SDK 对其进行验证。
或者,您可以修改前面的架构,在亚马逊上使用 API Gateway WebSockets GameLift。在这种方法中,游戏客户端和游戏后端服务之间的通信使用WebSocket-based实现进行。此实现可用于游戏后端 Lambda 函数通过 WebSocket 而不是实现轮询模型向游戏客户端发起服务器端消息。