2017-02-17 10 views
0

Я написал простой сервер Node, развернутый на Heroku, который подключается к базе данных Firebase, написанной пользователями моего приложения. Сервер отслеживает изменения дочерних элементов, отправляет мне сообщение через Twilio, когда мне нужны новые данные. Там нет передней части, и не должно быть. Как я могу использовать Heroku, который обычно заканчивает idle dynos, запускать это на неопределенный срок, чтобы я мог контролировать монитор Firebase и передавать предупреждения?Как я могу хранить экземпляр Heroku Node.js неограниченно долго?

+0

Есть много услуг хостинга там. Наверное, слишком много, чтобы упомянуть. Обычно люди также используют очередь firebase, чтобы делать то, о чем вы говорите. https://github.com/firebase/firebase-queue/ –

ответ

2

Heroku free web dynos that receive no traffic in a 30 minute period will sleep. Это препятствует тому, чтобы слушатели child.chs node.js Firebase оставались активными, и поэтому вы не получите сообщения 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