Javascript 维护云函数多次调用之间的持久连接
我目前正在将我的Javascript 维护云函数多次调用之间的持久连接,javascript,firebase,google-cloud-functions,Javascript,Firebase,Google Cloud Functions,我目前正在将我的firebase队列workers移动到firebase的云函数。我的一名员工通过APN和GCM向设备发送推送通知。为了通过apn发送推送通知,我使用库节点apn,其中我使用 const apn Connection=新的apn.连接(connectionOptions) 然后,我可以继续使用apnConnection向设备发送推送通知,而无需每次重新创建任务 apnConnection.pushNotification(pushNotification,设备) 我想问这样一个持
firebase队列
workers移动到firebase的云函数。我的一名员工通过APN和GCM向设备发送推送通知。为了通过apn发送推送通知,我使用库节点apn
,其中我使用
const apn Connection=新的apn.连接(connectionOptions)代码>
然后,我可以继续使用apnConnection
向设备发送推送通知,而无需每次重新创建任务
apnConnection.pushNotification(pushNotification,设备)代码>
我想问这样一个持久性连接是否也会在多次调用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函数,完全无状态,因为我们只初始化admin SDK一次,我认为它在调用之间保持某种状态,但我想在查看代码之前进行检查。虽然大多数情况下,您的函数将在同一个容器中调用,但您不能依赖于此。容器可能会被回收,或者GCF可能会启动额外的容器,以防调用的函数超过单个容器可以处理的数量当添加新容器来处理额外的负载时,该容器是否不执行公共代码,即admin.initializeApp(firebaseConfig);const apn Connection=新的apn.连接(connectionOptions)代码>在我的情况下,并维护自己的连接
?是的,它会这样做。如果你分享你遇到问题的代码,也许会更容易帮助你。我有问题的代码。我的问题是让const apnConnection=new apn.Connection(connectionOptions)可以吗
在verifyCode
云函数外部,在verifyCode
函数内部使用apnConnection
,或者我是否需要将其移动到函数内部,并为每次调用云函数创建新连接。根据我从您的回答和评论中了解到的情况,我认为将其置于云函数之外是可以的,因为这些函数是在一个容器中运行的,并且可以根据负载添加或删除更多的容器。