私は現在、firebase-queue
のワーカーをFirebaseのクラウド機能に移動中です。私が持っている労働者の1人が、APNSとGCM経由でデバイスに通知を送ります。 APNSを経由してプッシュ通知を送信するために、私は図書館node-apn
を使用していた中で、私はその後、私はちょうど私が受け取ったときにデバイスにプッシュ通知を送信するためにapnConnection
を使用し続けることができクラウドファンクションの複数の呼び出し間の永続的な接続の維持
const apnConnection = new apn.Connection(connectionOptions);
を使用してAPNSへの持続的接続を作成します毎回それを再作成する必要なく1つを送信するタスク。
apnConnection.pushNotification(pushNotification, device);
私は、このような持続的な接続もFirebase関数の呼び出しの複数の間で開催するか、私はこの接続を作成し、Firebase関数の呼び出しごとにそれをシャットダウンする必要があるかどう聞きしたかったのです。私Firebase機能は、私はそれがダウン機能が呼び出しの間にいくつかの状態を維持することができるか、彼らはより完全にステートレスでAWSのラムダ関数のようであり、私たちは一度だけ、管理SDKを初期化するため、かどうかになると思います
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);
})
のようになります。呼び出し間にある種の状態を維持していると思いますが、コードを移動する前に確認したいと思います。
追加の負荷を処理するために新しいコンテナを追加すると、 'admin.initializeApp(firebaseConfig); const apnConnection =新しいapn.Connection(connectionOptions); '私の場合は、独自の' apnConnection'を維持しますか? –
はい、そうです。問題を抱えているコードを共有すると、あなたを助けるのが簡単になるでしょう。 –
私はこの問題のコードを持っています。私の質問は 'verify apiConnection = new apn.Connection(connectionOptions);'を 'verifyCode'クラウド関数の外側に置いて' verifyCode'関数の中で 'apnConnection'を使うか、クラウド機能を呼び出すたびに新しい接続を作成します。私があなたの答えとコメントから理解したところから、関数はコンテナ内で実行され、さらに多くのコンテナがロードごとに追加または削除されるため、クラウド関数の外に置くことは大丈夫だと思います。 –