我使用 setTimeout 和 setInterval 为每个连接的用户设置了相当多的服务器端超时,这些超时可以持续 10-30 秒。如果 Node.js 实例在这些超时之一的中间重新启动,它们显然会在重新启动时全部清除,这可能会给这些用户带来一些问题。我将如何坚持这些超时,或者是否有任何模块已经对此有所帮助?
问问题
2600 次
2 回答
4
setTimeOut
将延迟作为参数,因此在设置超时时,捕获currentServerTime + delay
说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 时间之后发生。
于 2017-06-10T04:11:50.390 回答
2
我会将开始时间和持续时间存储在 Redis 中,并在您的应用程序重新加载时重新启动不完整的计时器。一些 Redis 模块:
https://github.com/joyent/node/wiki/modules#wiki-db-nosql-redis
于 2012-07-12T16:55:50.387 回答