2016-04-22 14 views
0

の機能を自動化するNode.Jsと時間内に特定の瞬間に呼び出す方法はありますか?より正確には、ノードjsを使用してリマインダーを作成したいと思います。ユーザーから日付を受け取ったら、何かを思い出させるための通知を送信する必要があります。特定の瞬間にNodeJs関数を呼び出す

私はsetTimeout()関数を知っていますが、私はユーザーの大きなデータベースを持っているときは本当に良いアイデアですか?

ありがとうございます。

+1

私が見えた、microserviceに通知ルーチンを回して、cronジョブがサービスを実行する必要があります実行時に通知が送信され、一度送信されると通知がクリアされます。そうすれば、サーバが再起動したときにsetTimeoutsを失うことはありません。 – dandavis

+0

良いアイデア、ありがとう –

答えて

2

setTimeout()を使用してサーバー内のすべての作業を行うことはできますが、多数のユーザーの場合は、1人のユーザーごとにタイムアウトを設定する必要はありません。本当に必要なのは、通知する必要がある次のユーザーのための単一のタイムアウトです。タイマーが起動すると、通知する必要がある次のユーザーのタイマーなどを設定します。

これは、通知時間で並べ替えるオブジェクトの配列で行うことができます。配列に何かを追加するたびに、現在のタイマーをキャンセルし、配列に新しい通知を追加し、配列をソートし、最も早い通知のタイマーを設定します。

タイマーが起動すると、そのアイテムをアレイから削除し、次のものをスケジュールします。

これは、サーバーの再起動後も存続する可能性が高いため、変更するたびに通知配列(おそらくJSON形式)をファイルまたはデータベースに保存して、サーバーの再起動時にそのデータを再読み込みできるようにします。

なお、node.jsのスケジューリングモジュールでは、既に他の人が書いたコードを手に入れたい場合に、このタイプの機能を提供しています。これらのモジュールのいくつかの

例:

node-cron

agenda

node-schedule

0

あなたが探しているのはスケジューラまたはcronジョブです(起源はLinux OSです)。

NodeJSには、同じアイデアを実装しているnode-scheduleがあります。

関連する問題