首页 > 解决方案 > 在 Firestore 中有效匹配玩家

问题描述

我正在开发一款需要玩家匹配的游戏,即将 2 名玩家放入 1 个战斗室。

虽然游戏中很少有玩家在线这不是问题,但是如果我们假设一次有 1,000,000 名玩家在线的场景,他们都在尝试匹配,那么画面变得更加复杂。

假设以下流程

在此处输入图像描述

我的第一直觉是

  1. 当玩家点击“播放”时,调用云功能检查“打开”战斗室是否存在。
  2. 如果有一个开放,将玩家放置在其中并开始战斗或将战斗设置为活跃。
  3. 如果没有开放的房间,我们会创建一个新房间并等待其他玩家加入。

但是,鉴于我们有 1,000,000 名玩家将执行此操作,我在这里看到了很多问题。例如,在执行第 2 步并将房间设置为“活跃”时,我们可能会在这些请求解决期间将更多玩家推入其中?

标签: firebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


如果您想处理并发,我认为您应该使用事务来执行此操作(将玩家添加到房间)。这样,您可以确保在添加玩家之前检查房间是否仍然打开。如果 2 名玩家同时开始匹配并找到同一个房间,则只会将一名玩家添加到该房间 https://firebase.google.com/docs/firestore/manage-data/transactions


推荐阅读