【问题标题】:Maintaining persistent connections between multiple invocations of a Cloud Function在云函数的多次调用之间维护持久连接
【发布时间】:2017-04-01 11:00:05
【问题描述】:

我目前正在将我的 firebase-queue 工作人员迁移到 Cloud Functions for Firebase。我通过 APNS 和 GCM 向设备发送推送通知的一名工作人员。为了通过 APNS 发送推送通知,我使用库 node-apn 在其中创建到 APNS 的持久连接使用

const apnConnection = new apn.Connection(connectionOptions);

然后我可以继续使用apnConnection 向设备发送推送通知,只要我收到要发送的任务,而无需每次都重新创建它。

apnConnection.pushNotification(pushNotification, device);

我想问一下这样的持久连接是否也会在多个 Firebase 函数调用之间保持,或者我是否需要创建此连接并在每次调用 Firebase 函数时将其关闭。我的 Firebase 函数看起来像

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(firebaseConfig);

const apnConnection = new apn.Connection(connectionOptions);

exports.verifyCode = functions.database.ref('/tasks/sendPushNotification/{taskId}')
  .onWrite(event => {
    const taskSnapshot = event.data
    if(!taskSnapshot.exists()) {
      return
    }
    const task = taskSnapshot.val()

    // Create pushNotification and device from the task

    return apnConnection.pushNotification(pushNotification, device);
  })

我认为这归结为函数是否可以在调用之间保持某种状态,或者它们更像是完全无状态的 AWS lambda 函数,并且由于我们只初始化一次管理 SDK,我认为它在调用之间保持某种状态调用,但我想在移动代码之前检查一下。

【问题讨论】:

    标签: javascript firebase google-cloud-functions


    【解决方案1】:

    虽然您的函数通常会在同一个容器中被调用,但您不能依赖它。容器可能会被回收,或者 GCF 可能会启动额外的容器,以防你的函数被调用的次数超过单个容器的处理能力

    【讨论】:

    • 当添加一个新容器来处理额外负载时,该容器是否不执行在我的情况下为admin.initializeApp(firebaseConfig); const apnConnection = new apn.Connection(connectionOptions); 的公共代码并维护自己的apnConnection
    • 是的,它就是这样做的。如果您分享遇到问题的代码,也许会更容易为您提供帮助。
    • 我有问题中的代码。我的问题是可以在verifyCode 云函数之外使用const apnConnection = new apn.Connection(connectionOptions); 并在verifyCode 函数内部使用apnConnection,还是我需要将它移到函数内部并为每次调用创建一个新连接云功能。根据我从您的回答和评论中了解到的情况,我认为将它放在云功能之外是可以的,因为这些功能在保持开启的容器中运行,并且可以根据负载添加或删除更多容器。
    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    相关资源
    最近更新 更多