首页 > 解决方案 > 在只有两个用户的测试环境中达到 100 个活动连接限制

问题描述

我有一个 Web 客户端和一些使用 Admin SDK 的 Lambda 函数。我最近注意到我已经达到了 100 个同时连接的限制,但我真的不应该接近这个限制。此外,即使在函数完成后,我的 Lamba 函数建立的连接似乎也没有断开。

任何想法:

注意:这是我正在使用的测试环境,因此我更愿意将其保留在免费层中,并且我的要求绝对不应该达到 100 个活动限制。我在生产中的付费计划。


我试图initializeApp通过使用以下连接代码来避免多次调用。在我正在谈论的示例中,我只有一个数据库作为后端,因此每次都使用DEFAULT的默认“名称”。

const runningApps = new Set(firebase.apps.map(i => i.name));
this.app = runningApps.has(name)
  ? firebase.app()
  : firebase.initializeApp({
      credential: firebase.credential.cert(serviceAccount),
      databaseURL: config.databaseUrl
    });

我现在正在尝试显式关闭与的连接,goOffline但这会导致另一个问题,即在第二个连接上 - 也就是已经设置了 DEFAULT 应用程序并且它只是重用了已经建立的连接我得到以下日志记录:

# Generated as result of `goOnline`
Connecting to Firebase: [https://xyz.firebaseio.com]
appears to be already connected
# Listening on ".info/connected" comes back as true, resulting in:
AbstractedAdmin: connected to [DEFAULT]
# but then I get this error
NotAllowed: You must first connect before using the database() API at Object._getFirebaseType

标签: firebasefirebase-realtime-databaseaws-lambda

解决方案


您对数据库有意外的传入连接这一事实使陈旧的实例看起来像是保持打开的连接。

goOffline()我能想到的最好的方法是在完成显式断开之前调用您的函数。这也可能意味着您必须goOnline在函数开始时调用,因为它可能在之前离线的实例上运行。两者goOnlinegoOffline都是同步调用 afaik,但在上线和数据在您的应用程序中可用之间肯定会有一段时间。

如果 Lambda 有办法让您检测其实例的生命周期事件,那将是调用goOfflinegoOnline.


推荐阅读