我目前正在将firebase-queue
工作人员移至Cloud Functions for Firebase。我之一的工作人员通过APNS和GCM向设备发送推送通知。为了通过APNS发送推送通知,我正在使用库node-apn
,我在其中使用
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,我认为它们之间保持某种状态调用,但我想在移动代码之前检查。
答案 0 :(得分:1)
虽然大多数情况下您的函数将在同一个容器中调用,但您不能依赖它。容器可以被回收,或者GCF可能会启动额外的容器,以防你的函数被调用超过一个容器可以处理