Google Cloud函数中实时数据库触发器上的setTimeout()

时间:2020-10-10 07:59:45

标签: firebase firebase-realtime-database google-cloud-functions

我有一个Firebase实时数据库结构,如下所示:

rooms/
     room_id/
            user_1/
                  name: 'hey',
                  connected: true

connected基本上是一个布尔值,指示用户是否已连接,并将使用Firebase提供的onDisconnect()设置为 false

现在我的问题是-如果每次用户的connected属性更改时都触发云功能,我可以运行setTimeout() 45秒。如果connected属性仍然为 false ,则在setTimeout() 的末尾(我从db中读取了该特定的连接值),然后删除了用户的节点(例如上面的user_1节点)。

如果同时触发许多触发器,setTimeout() 会带来问题吗?

3 个答案:

答案 0 :(得分:0)

简而言之,云功能可以运行maximum time

如果您的超时使其在该时间限制到期后被回调,则该函数将已经终止。

考虑使用一种非常简单有效的方法在Cloud Functions中调用称为cron-job的计划代码。

Ref

答案 1 :(得分:0)

如果使用setTimeout()将函数的执行延迟45秒,则可能不足以引起问题。函数的默认超时为1分钟,如果超过该超时,该函数将被迫立即终止。如果您对此感到担心,则只需increase the timeout

请记住,您要为执行功能的整个时间付费,因此即使暂停功能,也要为该时间计费。如果您想以更有效的方式延迟某些工作以备后用,请考虑使用Cloud Tasks进行安排。

答案 2 :(得分:0)

据我了解,您的功能旨在监视已连接的用户,并正在继续从云功能连接到Firebase进餐时间数据库。正确吗?

为了监视Firebase Realtime数据库,GCP提供了监视数据库performanceusage的工具。

或者只是您只想保持实时连接?

if the request to the Firebase Realtime DB is RESTful requests like GET and PUT, it only keep the connection per request, but is is High requests, it still cost more

通常,我们建议客户端使用适用于您应用平台的本机SDK,而不是REST API。这些SDK保持开放的连接,从而减少了SSL加密成本和可与REST API相加的数据库负载。

但是,如果您确实使用REST API,请考虑使用HTTP保持活动来维护打开的连接,或者使用服务器发送的事件并设置保持活动,这可以减少SSL握手的成本。

相关问题