javascript - 在 Node.js 重新启动期间保留 setTimeout 和 setInterval

标签 javascript node.js settimeout setinterval

我使用 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/

相关文章:

javascript - HiddenField 值在回发时丢失

javascript - jQuery 单选按钮值验证

node.js - NodeJS/Express 无法连接到在 docker 中运行的 mongodb

javascript - 使用 NodeJS 更新全局变量

node.js - Windows 64 位中的 Testaulous 无法启动浏览器

JavaScript setTimeout Sinusbot

javascript - 将值增加到一个点,然后开始减少到一个点

javascript - 我将如何在 Javascript 中循环遍历一个数组,添加一个词,然后返回一个数组(不使用 map )?

javascript - 使用 OData 模型在间隔时间内更改表的单元格

javascript - 如何让它等到一切完成直到下一次迭代