在Node.js中保持setTimeout和setInterval重新启动

时间:2012-07-12 14:54:17

标签: javascript node.js settimeout setinterval

我为每个连接的用户设置了很多服务器端超时,其中setTimeout和setInterval可以持续10-30秒。如果Node.js实例在其中一个超时中间重新启动,则显然它们在重新启动时都被清除,这可能会导致这些用户出现一些问题。我将如何坚持这些超时,或者是否有任何模块可以帮助解决这个问题?

2 个答案:

答案 0 :(得分:1)

我会在Redis中存储开始时间和持续时间,并在应用程序重新加载时重新启动不完整的计时器。一些Redis模块:

https://github.com/joyent/node/wiki/modules#wiki-db-nosql-redis

答案 1 :(得分:1)

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时间之后发生。