#google-cloud-firestore
#google-облако-firestore
Вопрос:
Может ли клиент Firestore обнаруживать подписки на документ? Я хочу, чтобы клиент публиковал (записывал) изменения документа только в том случае, если хотя бы один другой клиент прослушивает этот документ. В моем случае это значительно сократило бы количество записей Firestore в базе данных.
Сценарий:
- клиент выбирает измеренное значение каждые 3 секунды и публикует его в Firestore
- другой клиент (приложение) прослушивает этот документ Firestore и отображает обновления значений
- приложение открывается только иногда, когда пользователь хочет просмотреть данные. Большую часть времени он не открыт, и, следовательно, ни один клиент не прослушивает этот документ
Есть ли в API Firestore какой-либо способ определить, прослушивается ли документ?
Ответ №1:
Нет, это невозможно. Код, который записывает документ, будет делать это безоговорочно. Вы не можете организовать запись, если нет слушателей, и вы не можете узнать, есть ли вообще какие-либо слушатели. Вам понадобится какая-то другая (гораздо более сложная система), настроенная для выполнения чего-то подобного.
Ответ №2:
Как сказал Дуг, в Firestore нет ничего встроенного, чтобы определить, есть ли слушатели в данных. Самое близкое, о чем я могу думать, — это система присутствия, которая (вроде) встроена в другую базу данных Firebase (базу данных реального времени), но в Firestore ее нет (пока для нее разрабатывается расширение).
Но даже при этом вам, вероятно, потребуется выполнить дополнительную работу, чтобы конкретно отслеживать, какие коллекции прослушивает каждый клиент. Это сводилось бы к:
- При подключении наблюдателя также запишите этого наблюдателя в базу данных реального времени. В то же время зарегистрируйте
onDisconnect
обработчик для этого узла, чтобы он автоматически удалялся при отключении клиента. - При отсоединении obersver удалите его запись из базы данных реального времени и удалите
onDisconnect
обработчик. - Теперь в вашем приложении publisher вы можете определить, сколько наблюдателей имеется для каждой коллекции.