我正在开发一款需要玩家配对的游戏,即将 2 名玩家放入 1 个战斗室。
虽然游戏中在线玩家很少,但这不是问题,但是如果我们假设同时有 1,000,000 名玩家在线,并且都在尝试匹配,那么情况就会变得更加复杂。
假设以下流程
我的第一直觉是
- 当玩家点击“开始”时,调用云函数检查是否存在“开放”战斗室。
- 如果有一个空位,请将玩家放入其中并开始战斗或将战斗设置为事件状态。
- 如果没有开放房间,我们会创建新房间并等待另一位玩家加入。
但是,鉴于我们有 1,000,000 名玩家执行此操作,我在这里看到了很多问题。例如,在执行步骤 2 并将空间设置为“事件”时,我们可能会在这些请求得到解决期间将更多玩家插入其中?
最佳答案
如果你想处理并发,我认为你应该使用事务来执行此操作(将玩家添加到房间)。这样,您就可以确保在添加玩家之前检查房间是否仍然打开。如果2名玩家同时开始匹配并找到同一个房间,则该房间中只会添加一名玩家 https://firebase.google.com/docs/firestore/manage-data/transactions
关于firebase - 在firestore中高效匹配玩家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54609385/