Node.js 定期检查nodejs?
我有一个带有mongodb数据库的discord机器人。 他有一个温和的命令,在这种情况下是一个无声的命令。每次主持人使成员静音时,该成员在数据库中收到一个«静音»角色和等于当前UNIX时间+静音时间秒数的静音值。然后,在启动应用程序时的主文件中,我创建计时器(Node.js 定期检查nodejs?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个带有mongodb数据库的discord机器人。 他有一个温和的命令,在这种情况下是一个无声的命令。每次主持人使成员静音时,该成员在数据库中收到一个«静音»角色和等于当前UNIX时间+静音时间秒数的静音值。然后,在启动应用程序时的主文件中,我创建计时器(setInterval()),它每分钟查询一次数据库,并检查当前时间是否长于数据库中的时间。如果是这样,参与者将从“静音”角色中移除,并重置该值 问题:这是一种好的做法吗?你怎样才能做得更好?(我不考虑在发布惩罚后启动 SETTIMEOU
setInterval()
),它每分钟查询一次数据库,并检查当前时间是否长于数据库中的时间。如果是这样,参与者将从“静音”角色中移除,并重置该值
问题:这是一种好的做法吗?你怎样才能做得更好?(我不考虑在发布惩罚后启动<代码> SETTIMEOUT()<代码>定时器,因为在这种情况下,当应用程序重新启动时,参与者永远不会被取消)
谢谢! 可能的解决方案:
- 最佳时机。每一个被使用的声音在完美的时间被解除静音,几乎没有延迟
- 仅当某人处于静音状态时才使用数据库
- 如果你的应用程序崩溃,所有超时都会消失。您可以通过添加一个启动例程来解决这个问题,该例程取消所有旧的静音,并为每个仍然静音的用户添加新的超时
- 此外,许多沉默的用户可能会造成大量超时,并消耗更多的时间 资源
- 将数据库操作减少到每间隔1次
- 即使在重新启动应用程序后也能正常工作
- 即使没有人被静音,也会进行数据库检查
- 用户将延迟解除静音
你的情况没有什么不妥或错误。我建议采用解决方案2,因为它更具可伸缩性。我认为setTimeout是最简单的方法。 如果希望安全重启,则应在启动时添加一个调用,该调用将检查mongoDb中的所有静音用户,并使用保存在mongo中的时间戳调用setTimeout。这样,您就可以确保没有人会保持沉默 如果用户仍在数据库中,但时间已过,您也可以调用setImmediate或直接调用clearing函数