首页 > 解决方案 > 在nodejs中定期检查?

问题描述

我有一个带有 mongodb 数据库的不和谐机器人。他有一个调节命令,在这种情况下是一个静音命令。每次主持人将成员静音时,该成员都会在数据库中收到一个«已静音»角色和静音值,该值等于当前 UNIX 时间 + 静音时间秒数。然后,在我启动应用程序时的主文件中,我创建了计时器 ( setInterval ()),它每分钟查询一次数据库并检查当前时间是否比数据库中的时间长。如果是这样,则将参与者从静音角色中移除并重置该值。

问题:这是一个好习惯吗?你怎么能做得更好?(我不考虑setTimeout ()在发出惩罚后启动计时器的选项,因为在这种情况下,当应用程序重新启动时,参与者永远不会被取消静音)

感谢!

标签: node.jsmongodbmongoose

解决方案


可能的解决方案

  1. 在每个静音上使用 setTimeout()。

亲:

  • 最佳时机。每次使用都会在完美的时间取消静音,延迟几乎为零。
  • 仅当某人静音时才使用数据库。

缺点:

  • 如果您的应用程序崩溃,所有超时都消失了。您可以通过添加一个启动例程来解决此问题,该例程取消所有旧静音并为每个仍然静音的用户添加新的超时。
  • 此外,许多静音用户可能会造成大量超时并消耗更多资源。
  1. 使用 setInterval()

亲:

  • 将数据库操作减少到每个时间间隔 1 个。
  • 即使在重新启动应用程序后也能正常工作。

缺点:

  • 即使没有人被静音,也会进行数据库检查。
  • 用户将有延迟取消静音。

结论

你的情况没有对错之分。我建议采用解决方案 2,因为它更具可扩展性。


推荐阅读