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