Почему бы не сохранить объект Job
в файле node.js, сохраненный в базе данных.
var Job = {
id: long,
task: String,
configuration: JSON,
dueDate: Date,
finished: bit
};
Я бы посоветовал вам сохранить идентификатор только в ОЗУ и оставить все остальные данные Job
в базе данных.Когда ваша функция тайм-аута наконец-то запускается, ей нужно знать .id
, чтобы получить другие данные.
var job = createJob(...); // create from async data somewhere.
job.save(); // save the job.
var id = job.id // only store the id in RAM
// ask the job to be run in the future.
setTimeout(Date.now - job.dueDate, function() {
// load the job when you want to run it
db.load(id, function(job) {
// run it.
run(job);
// mark as finished
job.finished = true;
// save your finished = true state
job.save();
});
});
// remove job from RAM now.
job = null;
Если сервер когда-либо дает сбой, все, что вам нужно, это запросить все задания, которые имеют [finished=false]
, загрузитьих в оперативную память и снова запустите setTimeouts.
Если что-то пойдет не так, вы сможете перезагрузить компьютер так:
db.find("job", { finished: false }, function(jobs) {
each(jobs, function(job) {
var id = job.id;
setTimeout(Date.now - job.dueDate, function() {
// load the job when you want to run it
db.load(id, function(job) {
// run it.
run(job);
// mark as finished
job.finished = true;
// save your finished = true state
job.save();
});
});
job = null;
});
});