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

我设置了相当多的服务器端超时setTimeout和setInterval每个连接的用户可以持续10-30秒。 如果Node.js实例在其中一个超时期间重新启动,显然它们在重新启动时会被清除,这可能会给这些用户带来一些问题。 我将如何去坚持这些超时,还是有任何模块已经帮助了这个?

       

网上收集的解决方案 "在Node.js中保持setTimeout和setInterval重新启动"

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

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

setTimeOut以延迟为参数,所以当设置超时时,捕获' currentServerTime + delay '说' serverTriggerTime '并将其保存在数据库中。 然后,在重新启动服务器时,使用serverTriggerTime创build相同的计时器。 然后, 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时间之后发生。