Если я включу onSnapshot в режиме реального времени для прослушивания Firestore в облачной функции, это будет стоить дороже? - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть прослушиватель изменений базы данных Firestore, и он выбирается автоматически каждый раз, когда происходит изменение, однако, если я решу реализовать его в облачной функции и вызвать его из клиентского приложения, это будет стоить дороже, потому что оно будет работать 24 часа / 7 даже если пользователи не используют приложение?

Это на стороне клиента:

     firestore()
            .collection('Collection').doc().collection('public')
            .where('act', '==', 1)
            .orderBy('time', 'asc')
            .limit(10)
            .onSnapshot({
                error: (e) => this.setState({ errorMessage: e, loading: false }),
                next: (querySnapshot) => { this._calculateLocationDistance(querySnapshot) },
            });

Более того, необходимо ли это делать в облачной функции? Это рискованно, если я оставлю это на стороне клиента?

1 Ответ

1 голос
/ 19 апреля 2020

Вы не можете эффективно использовать слушателей в облачных функциях. Облачные функции должны быть без состояний . Они обслуживают один запрос за раз, а потом убираются. Если вы попытаетесь использовать слушателя, он просто не будет работать так, как вы ожидаете. Облачные функции также не держат сокет открытым для запрашивающей стороны. Как только ответ отправлен, соединение закрывается, и его невозможно открыть.

С учетом этих ограничений функции обычно просто используют get() для выборочного извлечения данных и возврата результатов в клиент. Если вам нужны результаты в реальном времени, это должно быть реализовано на клиенте.

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

...