任何使javascript set interval或setTimeout在node.js服务器重启后继续计数的解决方案

Any work-around to make javascript set interval or setTimeout keep counting after node.js server restarts

本文关键字:继续 重启 解决方案 服务器 js interval set javascript setTimeout node 任何使      更新时间:2023-09-26

我目前正在slack上构建一个提醒机器人。这个bot基于node.js,并使用rails api,通过PostgreSQL持久化数据。当用户设置任务时,触发setTimeout并通过slack向用户发送提醒消息。

但是,当node.js服务器重新启动时,所有正在运行的计时器都会被重置。

在寻找解决方案时,我只看到了James之前问过的一个类似的问题。最好的答案是他使用redis。

我一直在看他们的文档,看到它是一个nosql存储。我不太确定在这种特殊情况下如何使用它(问题的答案中没有细节)。

是否有任何解决方法来保持setInterval/setTimeout计时器计数时,服务器重启?如果我必须使用Redis,我该怎么做呢?

你也可以在PostgreSQL中这样做——当用户设置一个任务时,在数据库中保存"提醒时间"。因此,假设现在是2015-8-18中午,ID为12的用户想要在一小时内提醒"开始任务B",您将保存

user_id: 12
message: "start task B"
reminder_time: "2015-08-18 13:00:00 UTC"

当你发送一个提醒时,从数据库中删除它。当服务器重新启动时,让它加载所有的提醒时间,计算提醒发生之前的时间,并开始一个新的超时。