2017-01-31 4 views
2

私は予約システムを実装しており、受け入れられているジョブとジョブの開始の間の時間の概念、 。ジョブの開始時刻に達すると「状態A」から「状態B」に移動し、ジョブの終了時刻に達すると「状態B」から「状態C」に移動する必要があります。NodeJS - 特定の日時に実行する非常に単純なタスクをスケジュールします

私はこれをBullやBee-Queueのようなキューシステムを使って実装できますが、私の仕事の「状態」を変更し、バックグラウンド処理を実行する必要がないので間違っているようです。

私は単に「3時にこのタスクを「状態B」に変更し、午後5時にはこのタスクを「状態C」に変更する」と言うことができます。

毎分DBをポーリングできますか?これは「正しい」アプローチですか?

答えて

0

スケジューリングを伴わないアプローチでは、リクエスト時にstateプロパティの値を計算することになります。

stateの値を正確に午後3時に更新するのではなく、誰かが予約リソースをリクエストしたときに現在の時刻を確認します。それが午後3時で、<午後5時であれば、stateを「状態B」として返します。午後5時>の場合は、「状態C」としてstateを返します。

+0

私はその考えを持っていました。つまり、メールを送信する必要がある場合、これはどのように変更されますか?それでキューが必要ですか? –

+0

私は仕事をスケジューリングシステムにオフロードしています。おそらく - https://mesos.github.io/chronos/ - HTTPをapiに話して、必要なことをするスケジュールされたジョブを設定することができます – Robbie

+0

メールを送る方法を知っているスクリプトを作成することができます。顧客があなたのシステムに予約を作成すると、apiは予定された時間にメールスクリプトを実行するようにスケジューリングシステムにHTTP要求を行います – Robbie

1

node-cronモジュールの使用はいかがですか?あなたは時間に基づいてジョブをスケジュールするノード-cronを使用することができ、周波数などは、より多くの例 https://www.npmjs.com/package/node-cron

のための公式のリンクを参照してください、私はあなたが特定のタスクをスケジュールするsetTimeout(function, timeout)を使用することができます

var cron = require('node-cron'); 

cron.schedule('* * * * *', function(){ 
console.log('running a task every minute'); 
}); 
+0

これは定期的なタスクに使用されるようです。特定の時間間隔で発生するタスクが必要ですが、[Crone](https://github.com/crrobinson14/crone)がこれを解決するようです。 –

+0

これはcron構文を使用しているため、特定の時間間隔で実行するように設定することもできます。 – manishg

+0

一度だけですか? 「2016年6月23日午後4時5分13午後にこれを実行したい」と言うことができますか? –

1

参考のために1を貼り付け期間。

var now = new Date(); //creates date object at current time 
var date = new Date(...); //create first state-changing time 

//Execute task after (date - now) milliseconds 
setTimeout(function(){ 
    //execute tasks 
}, date - now); 

ここで、ループを使用してsetTimeout()内でsetTimeout()を実行すると、タスクを完了できます。

関連する問題