Как случайным образом сопоставлять пользователей с Firebase
Я пытаюсь создать игру, в которой пользователи сопоставляются друг с другом случайным образом, используя Firebase.
Моя идея сопоставить их такова:
- Заходит пользователь А, читает список игр. Если нет никаких игр, ждите начала игры. Ставит себя инициатором, оппонент - нулем.
- Заходит пользователь Б, читает список игр. Находит игру пользователя А (оппонент нулевой) и присоединяется к ней (он становится оппонентом)
- Что произойдет, если пользователь C окажется между моментом, когда пользователь B прочитает список игр, и моментом, когда пользователь B объявит себя в качестве оппонента (для него оппонент все равно будет нулевым). В основном проблема параллелизма.
Я читал о транзакциях, но я не уверен на 100%, что они помогают в этом случае (чтение игр без оппонента, запись оппонента в одну из игр), потому что я видел, что они много использовали для увеличения значений, а не для чтения / запись данных.
1 ответ
Блоки транзакций используются для параллелизма. Они предотвращают проблемы, когда два пользователя пытаются одновременно писать в одну и ту же область. Как вы сказали, это часто можно увидеть с лайками. Таким образом, если в игре только 1 игрок, и вы сохраняете значение 0, чтобы другие игроки знали, что игра "открыта". Когда игрок пытается подключиться к этой игре, он записывает в эту область и изменяет 0 на 1. Если другой игрок попытался подключиться одновременно, его блок транзакций теперь срабатывает. Когда они получат данные, они увидят 1, но не ноль. В этот момент вы возвращаетесь и ищите новую игру. Не уверен, что это лучший метод, но он должен работать.