2017-02-17 5 views
0

私は、私のアプリケーションのユーザによって書かれたFirebase DBに接続する、Herokuに配備された単純なノードサーバを作成しました。サーバーは子の変更を監視し、私が検討する必要がある新しいデータがあるときに私にTwilioを介してメッセージを送信します。フロントエンドはなく、存在する必要もありません。普通にアイドリング状態のdynosを終了するHerokuにこれを無期限に実行させると、Firebaseを監視してアラートを渡すことができます。Heroku Node.jsインスタンスを無期限に実行するにはどうすればよいですか?

+0

ホスティングサービスの多くはそこにあります。おそらく言及するにはあまりにも多くの。人々があなたが話しているようなことをするためにfirebase-queueを使うことは一般的です。 https://github.com/firebase/firebase-queue/ –

答えて

2

Heroku free web dynos that receive no traffic in a 30 minute period will sleep。これにより、Firebaseのnode.js child_changedリスナーがアクティブなままになることが防止され、Twilioメッセージは受信されません。そのような事態を防ぐために、非常に単純なsetInterval関数(例:this articleのような)を30分未満の頻度で実行することができます。

var http = require("http"); 
    setInterval(function() { 
    http.get("http://<your app name>.herokuapp.com"); 
}, 300000); // every 5 minutes (300000) 

私はそれに間違いは見られません。

何かがクラッシュするあなたのNode.jsサーバーの原因となる場合は、あなたも自分で何かを知らせるためのコードをチェックする必要が含めることができます。

process.on('uncaughtException', function (err) { 
    console.log(err); 
    twilioClient.messages.create({...}, function(twilioErr, message) { 
    if (twilioErr) { 
     console.log("twilio error: " + twilioErr); 
    } 
    }); 
} 
+0

これは非常に役に立ちました。私はちょうど私が各ページの負荷に問題があったので、setIntervalをsetTimeoutに変更したことに気づくでしょう。私はHerokuエラーが発生するまで、新しい繰り返しのページローダーを生成します。 – ed94133

関連する問題