Может ли издатель Firestore обнаруживать подписки от слушателей?

#google-cloud-firestore

#google-облако-firestore

Вопрос:

Может ли клиент Firestore обнаруживать подписки на документ? Я хочу, чтобы клиент публиковал (записывал) изменения документа только в том случае, если хотя бы один другой клиент прослушивает этот документ. В моем случае это значительно сократило бы количество записей Firestore в базе данных.

Сценарий:

  • клиент выбирает измеренное значение каждые 3 секунды и публикует его в Firestore
  • другой клиент (приложение) прослушивает этот документ Firestore и отображает обновления значений
  • приложение открывается только иногда, когда пользователь хочет просмотреть данные. Большую часть времени он не открыт, и, следовательно, ни один клиент не прослушивает этот документ

Есть ли в API Firestore какой-либо способ определить, прослушивается ли документ?

Ответ №1:

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

Ответ №2:

Как сказал Дуг, в Firestore нет ничего встроенного, чтобы определить, есть ли слушатели в данных. Самое близкое, о чем я могу думать, — это система присутствия, которая (вроде) встроена в другую базу данных Firebase (базу данных реального времени), но в Firestore ее нет (пока для нее разрабатывается расширение).

Но даже при этом вам, вероятно, потребуется выполнить дополнительную работу, чтобы конкретно отслеживать, какие коллекции прослушивает каждый клиент. Это сводилось бы к:

  1. При подключении наблюдателя также запишите этого наблюдателя в базу данных реального времени. В то же время зарегистрируйте onDisconnect обработчик для этого узла, чтобы он автоматически удалялся при отключении клиента.
  2. При отсоединении obersver удалите его запись из базы данных реального времени и удалите onDisconnect обработчик.
  3. Теперь в вашем приложении publisher вы можете определить, сколько наблюдателей имеется для каждой коллекции.