Node.jsは初めてです。 node.jsが5分ごとにmongodbにクエリを実行し、特定のデータを取得してから、socket.ioを使用して、サブスクライブしたWebクライアントがこのデータにアクセスできるようにする必要があります。私はすでにsocket.ioパーツを設定しており、もちろんmongoです。node.jsを5分ごとに実行し、socket.ioに投稿する方法を知る必要があります。
これに最適なソリューションは何ですか?
ありがとう
var minutes = 5, the_interval = minutes * 60 * 1000;
setInterval(function() {
console.log("I am doing my 5 minutes check");
// do your stuff here
}, the_interval);
そのコードをnode_regular_job.jsとして保存して実行します:)
これは、管理する非同期タスクがいくつかある場合に行うべき方法です。
(function schedule() {
background.asyncStuff().then(function() {
console.log('Process finished, waiting 5 minutes');
setTimeout(function() {
console.log('Going to restart');
schedule();
}, 1000 * 60 * 5);
}).catch(err => console.error('error in scheduler', err));
})();
ただし、ジョブがいつ開始されるかは保証できませんが、ジョブの実行に5分以上かかる場合は、少なくともジョブを同時に複数回実行することはできません。
非同期ジョブのスケジュールには引き続きsetInterval
を使用できますが、そうする場合は、少なくとも処理済みのタスクに「処理中」のフラグを付けて、ジョブが2回前にスケジュールされるようにする必要があります以前の処理が完了すると、ロジックはまだ処理されているタスクを処理しないことを決定する場合があります。
@ alessioalexには正しい答えがあります コードからジョブを制御するときですが、CLIソリューションを探すためにここでつまずく人もいます。あなたは打ち負かすことはできません sloth-cli
。
たとえば、sloth 5 "npm start"
走る npm start
5分ごと。
このプロジェクト には例がありますpackage.json
使用法。
このパッケージ を使用できます
var cron = require('node-cron');
cron.schedule('*/5 * * * *', () => {
console.log('running a task 5 minutes');
});