3

2 つの node.js Web サーバーがあります。Web サーバー内にデータをキャッシュします。システム時間に基づいてキャッシュのロード/クリアを同期します。すべてのホストの時刻同期を行いました。

次のコードを使用して、15 分ごとにキャッシュをクリアします。

millisTillNexthour = "Calculate millis remaining until next hour"

setTimeout(function() {
  setInterval(function() {
    cache.clear();
  }, 60000*15);
}, millisTillNexthour);

私の期待では、このプロセスが永久に実行されたとしても、1 日の各時間の 15 分ごとにキャッシュがクリアされます。

私の質問は: setInterval が時間の経過とともにドリフトすることはありますか?

例:現在、キャッシュをクリアします10:00 10:15 10:30 10:45 11:00 ......

システム時間の 10:15 ではなく、10:15 にキャッシュをクリアするはずだった setInterval がシステム時間の 10:20 に実行されることはありますか??

これがどのように機能するかわかりません。光を当ててください。私の質問をうまく説明できたと思います。

4

6 に答える 6

1

setInterval の NodeJS 実装にバグがあることに気づき、非常に失望しています。こちらをご覧ください:

https://github.com/nodejs/node/issues/7346#issuecomment-300432730

于 2017-05-10T13:47:48.210 に答える
0

Date() オブジェクトを使用して特定の時間を設定し、特定のミリ秒数を日付に追加できます。

于 2013-08-10T23:00:05.403 に答える
-1

setInterval は完璧な世界でドリフトすべきではありません。他のことがシステム リソースを占有するために遅延する可能性があります。より正確な解決策が必要な場合は、clock() 関数を使用してノードを「調整」してください。

于 2013-08-10T22:58:24.690 に答える