2016-01-07 1 views
0

У меня проблема с setInterval и clearInterval в NodeJS. Я хочу создать службу мониторинга для веб-сайтов. Я планирую внедрить веб-службу, которая получает URL-адрес и значение интервала мониторинга и метод setTableInterval(). Пока все в порядке.Что нужно хранить для идентификации интервала в NodeJS

После этого я хочу сохранить URL-адрес, интервал и идентификатор объекта setInterval для DB для дальнейшей работы. Но единственным идентификатором метода setInterval является объект. Я не могу сохранить этот объект в массиве на стороне сервера, потому что когда я перезапустил проект, все объекты исчезнут.

Есть ли у кого-нибудь подходящее решение для этого случая? Вы можете увидеть мой пример кода ниже.

var timeout = (parseInt(req.body.timeout) * (60 * 1000)); 
var query = { 
    website: req.body.website, 
    timeout: timeout 
} 
var id = setInterval(checker(query), timeout); // This returns an object so it can not be stored in DB. 
query.id = id; 
console.log(id); 
store.save('websites', query).then(function(query) { 
    res.send({ 
     code: 200, 
     message: 'SUCCESS', 
     data: query 
    }); 
}).fail(function(err) { 
    res.send({ 
     code: 500, 
     message: 'FAIL_SYSTEM', 
     data: err 
    }); 
}) 
+0

База данных предназначена для постоянных данных. Если информация, которую вы хотите сохранить, не является постоянной (т. Е. Она «исчезает» после перезапуска сервера), тогда база данных не является подходящим местом для ее хранения. Вы можете сохранить его как глобальную переменную, поскольку глобальные переменные умирают, когда сервер закрывается. – BackSlash

+0

Да, я могу решить эту ситуацию с помощью функции init, которая берет все строки из БД и вызывает метод setInterval для каждого, когда каждый раз перезагружается сервер. Но я боюсь за перегрузку памяти, если я храню каждый объект Interval в качестве глобальной переменной. –

+0

полностью законный вопрос, на самом деле не понимаю нижний предел – Halogen

ответ

0

Если вам нужны постоянные повторяющиеся задачи, вы должны использовать что-то еще, кроме setInterval.

Заканчивать библиотеки agenda

+0

спасибо за ответ, я дам ему попробовать. –