Поддержание постоянных соединений между несколькими вызовами облачной функции

Я сейчас нахожусь в процессе перемещения моего 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 может ускорить дополнительные контейнеры в случае, если ваша функция вызывается больше, чем один контейнер может обработать

Другие вопросы по тегам