Как сделать так, чтобы эта база данных Firebase использовалась в многопользовательском режиме безопасно? - PullRequest
0 голосов
/ 11 мая 2018

Я хочу использовать базу данных Firebase для сопоставления моей простой мобильной игры для 2 игроков.

Поток, которому я пытаюсь следовать:

При условии отсутствия других игровых запросов

  1. Пользователь выбирает найти игру
  2. Запрос limittofirst (1) используется для ссылки в лобби
  3. Ничего не найдено
  4. Запишите UID пользователя в лобби, используя push
  5. Подождите, пока запись будет найдена другим игровым запросом

При условии, что есть ожидающие игровые запросы

  1. Пользователь выбирает поиск игры
  2. Запрос limittofirst (1) используется для ссылки на лобби базы данных
  3. Запись найдена с UID
  4. Удалить запись в лобби
  5. Создать игру, в которой будут оба игрока

Мой вопрос: если два или более пользователей пытаются найти игру наВ то же время, возможно, что limittofirst вернет один и тот же UID для нескольких людей дозапись может быть удалена.Есть ли способ убедиться, что UID в лобби получен только один раз, чтобы использовать его для настройки игры?

Я прочитал документы о транзакциях, и, похоже, он не подходит для этого варианта использования.Я не хочу, чтобы чтение / запись продолжались до тех пор, пока они не будут успешными.Я в основном хочу прочитать и удалить в одном вызове, чтобы значение не могло использоваться более одного раза.

Любая помощь приветствуется.

PS Логика для реализации этого будет внутрифункции Firebase, если это вообще помогает с решением.

1 Ответ

0 голосов
/ 11 мая 2018

Звучит так, как будто вы можете иметь только два состояния:

  1. Существует невыполненный запрос, и вы соединяетесь с пользователем в этом запросе.
  2. Нет ожидающего запроса,и вы становитесь невыполненным запросом.

В этом случае я бы точно смоделировал это в базе данных:

outstanding_requests: "uid"

Теперь вы можете выполнить транзакцию на этом узле для чтения-и установить его за один раз.В то время как эта сделка будет спорной, он должен быть очень кратковременным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...