Поддержание постоянных соединений между несколькими вызовами облачной функции
Я сейчас нахожусь в процессе перемещения моего firebase-queue
работники облачных функций для Firebase. Один из рабочих, которых я отправил push-уведомления на устройства через APNS и GCM. Для отправки push-уведомлений через APNS я использую библиотеку node-apn
в котором я создаю постоянное соединение с APNS, используя
const apnConnection = new apn.Connection(connectionOptions);
Тогда я могу просто продолжать использовать apnConnection
отправлять push-уведомления на устройства всякий раз, когда я получаю задание на отправку, без необходимости заново создавать его.
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, которые полностью не сохраняют состояния, и, поскольку мы только инициализируем административный SDK, я думаю, что он поддерживает какое-то состояние между вызовами, но я хотел проверить, прежде чем я перейду через код.
1 ответ
Хотя чаще всего ваши функции будут вызываться в одном и том же контейнере, вы не можете полагаться на это. Контейнеры могут быть переработаны или GCF может ускорить дополнительные контейнеры в случае, если ваша функция вызывается больше, чем один контейнер может обработать