Преодоление обновлений Firestore с небольшой задержкой - PullRequest
0 голосов
/ 07 марта 2019

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

У меня есть документ, в который пишут клиенты,
и моя идея состояла в том, чтобы позволить клиентам изменить это, пока это пустая строка.
В противном случае, если он уже заполнен (с идентификатором пользователя), вы не можете применить изменение.
Таким образом, я смогу узнать, какой пользователь нажал первым.

Проблема с этим решением в том, что он на стороне клиента,
и есть небольшая задержка, в результате чего пользователи, которые не нажали первый,
обновить свой идентификатор пользователя, потому что, когда они нажали, настоящий первый пользователь еще не обновился.

Теперь я новичок в firestore & firebase, и мой вопрос:
Есть ли способ преодолеть эту проблему?

У меня была другая идея, по сути, позволить всем клиентам отправлять текущее время в пожарный магазин,
а потом проверь, кто первый, но мне интересно, есть ли способ пойти с моей первой идеей и заставить ее работать.

ТНХ!

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Я думаю, вы могли бы извлечь выгоду из атомарности из транзакций (https://firebase.google.com/docs/firestore/manage-data/transactions)

Транзакция будет выглядеть следующим образом:

  • прочитайте строковое поле
  • , если оно пустое, напишите и верните «первый успех», если нет, верните «кто-то уже есть»
  • Если кто-то уже делаеттранзакция в этом поле, повторяйте транзакцию, пока другая транзакция не будет прервана (firestore сделает это автоматически)
1 голос
/ 07 марта 2019

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

  1. Первым будет создание HTTPS Cloud Function , где вы можете получить дату сервера и отправить ее в базу данных. Таким образом, вы не будете зависеть от локальной даты на устройствах ваших пользователей. Вы также можете сделать то же самое, разместив этот код в любом месте и вызывая его по HTTP, облачная функция становится проще.

  2. Другой вариант - сначала сохранить дату и пользователя в БД реального времени. Он был создан для приложений реального времени, поэтому, вероятно, он будет быстрее, чем Firestore, чтобы писать. Затем вы можете создать Облачная функция БД , которая получит дату и отправит ее в Firestore, и там вы сможете проверить, какой пользователь сохранил первым.

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