接続しているユーザーごとに、setTimeout と setInterval を使用して、10 ~ 30 秒続くかなりの数のサーバー側タイムアウトを設定しました。これらのタイムアウトのいずれかの途中で Node.js インスタンスが再起動すると、それらはすべて再起動時にクリアされるため、これらのユーザーに問題が発生する可能性があります。これらのタイムアウトを永続化するにはどうすればよいですか、またはこれに役立つモジュールは既にありますか?
質問する
2600 次
2 に答える
4
setTimeOut
パラメータとして遅延を取るため、タイムアウトを設定するときに、これをキャプチャしcurrentServerTime + delay
てserverTriggerTime
DBに永続化します。次に、サーバーの再起動時に、 を使用して同じタイマーを作成しますserverTriggerTime
。次に、delay = serverTriggerTime - currentServerTime
この遅延を使用して新しいタイマーを設定します。
タイマー設定時
const date = Date.now();
const serverTriggerTime = date + delay; // time in milliseconds
サーバーの再起動時:
serverTriggerTime = // retrieve from DB.
newDelay = serverTriggerTime - Date.now();
また、newDelay >= 0 の場合にのみ新しいタイマーを設定します。つまり、トリガー時間に達しておらず、newDelay 時間の後に発生します。
于 2017-06-10T04:11:50.390 に答える
2
開始時刻と期間を Redis に保存し、アプリケーションのリロード時に不完全なタイマーを再起動します。一部の Redis モジュール:
https://github.com/joyent/node/wiki/modules#wiki-db-nosql-redis
于 2012-07-12T16:55:50.387 に答える