Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 定期检查nodejs?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 定期检查nodejs?

Node.js 定期检查nodejs?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个带有mongodb数据库的discord机器人。 他有一个温和的命令,在这种情况下是一个无声的命令。每次主持人使成员静音时,该成员在数据库中收到一个«静音»角色和等于当前UNIX时间+静音时间秒数的静音值。然后,在启动应用程序时的主文件中,我创建计时器(setInterval()),它每分钟查询一次数据库,并检查当前时间是否长于数据库中的时间。如果是这样,参与者将从“静音”角色中移除,并重置该值 问题:这是一种好的做法吗?你怎样才能做得更好?(我不考虑在发布惩罚后启动 SETTIMEOU

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

问题:这是一种好的做法吗?你怎样才能做得更好?(我不考虑在发布惩罚后启动<代码> SETTIMEOUT()<代码>定时器,因为在这种情况下,当应用程序重新启动时,参与者永远不会被取消)

谢谢!

可能的解决方案:

  • 在每次静音时使用setTimeout()
  • PRO:

    • 最佳时机。每一个被使用的声音在完美的时间被解除静音,几乎没有延迟
    • 仅当某人处于静音状态时才使用数据库
    CON:

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

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

    • 即使没有人被静音,也会进行数据库检查
    • 用户将延迟解除静音
    结论:


    你的情况没有什么不妥或错误。我建议采用解决方案2,因为它更具可伸缩性。

    我认为setTimeout是最简单的方法。 如果希望安全重启,则应在启动时添加一个调用,该调用将检查mongoDb中的所有静音用户,并使用保存在mongo中的时间戳调用setTimeout。这样,您就可以确保没有人会保持沉默

    如果用户仍在数据库中,但时间已过,您也可以调用setImmediate或直接调用clearing函数