多人游戏 Matchmaker 参考体系结构

设计注意事项

若要实现 Matchmaker,您将需要一个数据库,其中存储要查找匹配会话和在服务器上运行的进程或一组负责处理逻辑的无服务器 Azure Functions 的玩家数据:

  1. 将玩家添加到队列 - 当玩家想要开始搜索多人游戏会话时调用。
  2. 从队列中删除玩家 - 当玩家已决定停止搜索多人游戏会话(取消匹配)时,会调用此操作。
  3. 为玩家提供匹配 - 通过轮询机制调用,它返回游戏会话服务器连接详细信息或超时事件。
  4. 添加服务器 - 创建新服务器后,它会传递相关连接信息 (IP:Port),以便添加到数据库中。
  5. 高级别管理器 - 查找可启动的游戏会话,并查找每个游戏会话的服务器。

或者,当检测到没有足够的服务器时,您可以使用另一个进程或 Azure Functions 请求横向扩展。 另一种方法是,如果您使用的是游戏托管协调程序,则将其委托给该协调程序。

在构建匹配逻辑时,需要考虑三个关键变量。 目标是使其至少适用于三分之二的情况:

  • 最佳技能匹配 - 从所有考虑参加游戏会话的玩家来看,他们中的每一个人在游戏专业技能方面有多接近?
  • 最佳延迟 - 每个玩家在延迟方面有多接近?
  • 最佳排队时间 - 找到玩家可以加入的游戏会话需要多长时间?

此外,还有一些相关的概念需要考虑:

  • 白名单/黑名单 - 玩家或您作为游戏创建者,是否可以阻止特定的玩家或者允许特定的玩家加入游戏会话?
  • 加入进程 - 玩家可以在游戏开始后加入游戏会话吗?
  • 自动取消 - 您是否会设置一个限制,即如果某个特定的游戏会话在一段时间后无法启动,则自动取消?

总而言之,减少随机匹配时间的一个好方法是为游戏支持的每种类型设置一个队列,并将每个试图匹配的玩家放入与其请求相匹配的所有队列中。 然后,当队列已满时,只需启动该特定的游戏会话,并从所有队列中删除相关的玩家。

提示

如果您要查找开箱即用的匹配解决方案,PlayFab是一个完整的后端平台,用于生成、启动和发展具有匹配支持 的云连接游戏。

参考实现详细信息

下面是同一用例的不同实现,可以帮助您抢占先机:

  • 无服务器 - 使用 Azure Functions 和 Azure Redis 缓存。