维护云功能的多个调用之间的持久连接

时间:2017-04-01 11:00:06

标签: javascript firebase google-cloud-functions

我目前正在将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,我认为它们之间保持某种状态调用,但我想在移动代码之前检查。

1 个答案:

答案 0 :(得分:1)

虽然大多数情况下您的函数将在同一个容器中调用,但您不能依赖它。容器可以被回收,或者GCF可能会启动额外的容器,以防你的函数被调用超过一个容器可以处理