任何使javascript set interval或setTimeout在node.js服务器重启后继续计数的解决方案
Any work-around to make javascript set interval or setTimeout keep counting after node.js server restarts
我目前正在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"
当你发送一个提醒时,从数据库中删除它。当服务器重新启动时,让它加载所有的提醒时间,计算提醒发生之前的时间,并开始一个新的超时。
相关文章:
- 如何在Javascript中定义一个简单的自动重启倒计时
- MDN文档中关于弄清楚XUL元素的段落是什么意思:“如何将覆盖扩展转换为无重启”
- 如何修复IE 9中的文档模式重启
- 卡斯珀/幻影崩溃并自动重启
- 新闻自动收报机 - 过早重启
- 游戏重启Javascript/Jquery
- 重启CSS3动画后's停止
- 我的功能无法重启的原因是什么?
- 如果扩展被禁用,firefox重启后无法重新启用该扩展
- Three.js在单页webapp中正确重启场景
- popcorn.js可以检测切换视频,无需重启即可继续
- HTML5视频无法重启
- HTML5视频javascript控件-重启视频
- Webpack不会在不重启服务器的情况下将更改捆绑到某些文件中
- nodemon,Nodeclipse不会在文件更改时自动重启
- JavaScript / jQuery:在最后一次迭代时重启for循环
- 更新文件时不需要重启Node.js中的服务器
- 谷歌浏览器,音频,setTimeout,替换音频src,重启中间音频
- Javascript在闭包内重启定时器
- 节点重启前如何删除pid文件