firebase - 在 Firestore 中有效匹配玩家
问题描述
我正在开发一款需要玩家匹配的游戏,即将 2 名玩家放入 1 个战斗室。
虽然游戏中很少有玩家在线这不是问题,但是如果我们假设一次有 1,000,000 名玩家在线的场景,他们都在尝试匹配,那么画面变得更加复杂。
假设以下流程
我的第一直觉是
- 当玩家点击“播放”时,调用云功能检查“打开”战斗室是否存在。
- 如果有一个开放,将玩家放置在其中并开始战斗或将战斗设置为活跃。
- 如果没有开放的房间,我们会创建一个新房间并等待其他玩家加入。
但是,鉴于我们有 1,000,000 名玩家将执行此操作,我在这里看到了很多问题。例如,在执行第 2 步并将房间设置为“活跃”时,我们可能会在这些请求解决期间将更多玩家推入其中?
解决方案
如果您想处理并发,我认为您应该使用事务来执行此操作(将玩家添加到房间)。这样,您可以确保在添加玩家之前检查房间是否仍然打开。如果 2 名玩家同时开始匹配并找到同一个房间,则只会将一名玩家添加到该房间 https://firebase.google.com/docs/firestore/manage-data/transactions
推荐阅读
- entity - 在 Luis 上添加的实体值消失了
- javascript - 正则表达式模式匹配字符串,如“查看 1 到 10 的 100”
- mysql - 如何从 MySQL 57 中每个学生的每个 groupcode 中选择 2 个最高分?
- opencart - 打开购物车。在产品列表管理面板中显示过滤器“缺货状态”
- linux - 如何在 Ansible 中创建没有 .bashrc 的用户?
- python - 新的 pypi org 代理不适用于 sonatype nexus
- c# - ORA-00904: "Extent1"."MODIFIED_DATE": 标识符无效
- java - 如何在 Project Reactor 中为每个订阅者使用专用缓冲区?
- r - 从 R 中的列中删除整个日期时间部分,其中包含日期时间和其他一些描述
- python - 使用来自另一个多索引数据帧的 .loc 填充数据帧值的最快方法