如果我在Cloud Function中对Firestore实现onSnapshot实时监听器,会花费更多吗?

0 firebase google-cloud-platform react-native google-cloud-functions google-cloud-firestore

我有一个 Firestore DB 更改的侦听器,每次发生更改时它都会自动获取,但是,如果我决定在 Cloud Function 中实现它并从客户端应用程序调用它,它会花费更多,因为它甚至会 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) },
            });
Run Code Online (Sandbox Code Playgroud)

另外,有必要在云函数中进行吗?如果我把它留在客户端会有风险吗?

Dou*_*son 10

您无法真正在 Cloud Functions 中有效地使用侦听器。云函数应该是无状态的。他们一次只处理一个请求,然后进行清理。如果您尝试使用侦听器,它就不会按您期望的方式工作。Cloud Functions 也不向请求者保持打开的套接字。一旦发送响应,连接就会关闭,并且无法保持连接打开状态。

考虑到这些限制,函数通常仅用于get()一次性获取数据,并将结果返回给客户端。如果您想要实时结果,应该在客户端上实现。

如果您使用的后端可以使套接字连接对客户端保持打开状态,那么在后端拥有一个将结果传递给客户端的侦听器的成本也不会降低。当侦听器继续接收结果时,您仍需要为侦听器读取的每个文档收取文档读取费用。