我使用 setTimeout 和 setInterval 为每个连接的用户设置了很多服务器端超时,可以持续 10-30 秒。如果 Node.js 实例在这些超时之一的中间重新启动,它们显然会在重新启动时全部清除,这可能会给这些用户带来一些问题。我将如何坚持这些超时,或者是否有任何模块已经可以帮助解决这个问题?
最佳答案
setTimeOut
将延迟作为参数,因此在设置超时时,捕获 currentServerTime + delay
say serverTriggerTime
并将其持久化到数据库中。然后,在服务器重新启动时,使用 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 时间之后发生。
关于javascript - 在 Node.js 重新启动期间保留 setTimeout 和 setInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454587/