【问题标题】:setTimeout() on realtime database trigger in Google cloud functions谷歌云函数中实时数据库触发器的 setTimeout()
【发布时间】:2023-03-14 16:41:01
【问题描述】:

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

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

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

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

如果同时触发多个触发器,setTimeout() 会造成问题吗?

【问题讨论】:

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


    【解决方案1】:

    简而言之,Cloud Functions 有一个可以运行的maximum time

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

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

    Ref

    【讨论】:

      【解决方案2】:

      如果您使用setTimeout() 将函数的执行延迟 45 秒,那么这可能不足以引起问题。函数的默认超时时间为 1 分钟,如果超过该时间,函数将被强制立即终止。如果您对此感到担忧,请直接increase the timeout

      请记住,您要为函数执行的整个时间付费,因此即使您暂停函数,您也需要为该时间付费。如果您想要一种更有效的方式来延迟某些工作,请考虑使用Cloud Tasks 来安排。

      【讨论】:

        【解决方案3】:

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

        为了监控 Firebase 实时数据库,GCP 提供了监控 DB 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 keep-alive 来维持打开的连接或使用服务器发送的事件并设置 keep-alive,这可以降低 SSL 握手的成本。

        【讨论】:

        • 没有。在我的应用程序中,我有一个称为房间的功能,因此当有人断开连接时,我想向房间中的所有人显示该人已断开连接,重新连接也是如此。但我在这里想要的是,如果该人没有重新连接45 秒,然后将该人移出房间
        • 我相信火力基地。数据库。 OnDisconnect() 方法应该是记录客户端与数据库服务器断开连接的第一步。那么应该实现 messing() 方法进行通知。
        猜你喜欢
        • 2020-08-17
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2020-04-19
        • 1970-01-01
        • 1970-01-01
        • 2018-10-31
        • 2020-06-24
        相关资源
        最近更新 更多