-->

坚持setTimeout和setInterval的整个Node.js的重新启动(Persist se

2019-09-19 09:18发布

我设置了不少服务器端超时使用的setTimeout和setInterval的,可以持续10-30秒,每一个连接的用户。 如果Node.js的情况下,这些超时的一个中间重新启动,他们显然都被清除上重新启动,这可能会导致这些用户的一些问题。 我怎么会去坚持这些超时,还是有已经有这方面的帮助任何模块?

Answer 1:

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

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



Answer 2:

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



文章来源: Persist setTimeout and setInterval across Node.js restarts