【问题标题】:NodeJs, handle expiration date for user votesNodeJs,处理用户投票的到期日期
【发布时间】:2018-11-26 15:14:42
【问题描述】:

我目前正在开发一个应用程序。这还包括某种群聊。 里面的用户可以进行多次投票,例如踢某人。所有选票有效期为 1 周。如果所有其他用户提交他们的意见,投票将被删除。到目前为止一切顺利。

我还想要一个逻辑,如果投票过期,它会自动删除投票。 到目前为止,我想到了将投票的到期日期存储在数据库(MongoDB)中,按到期时间戳排序。 在 NodeJs 中,我总是从数据库中加载过期日期最短的投票。 然后我通过从当前日期中减去投票到期日期来检查还剩多少时间

Date.now() - voteTmp;

然后我可以设置一个超时,它调用一个函数来删除投票,并为下一次投票自动启动一个新的超时。这么大的秒数设置超时有问题吗?

你有更好的主意吗? 谢谢:)

【问题讨论】:

    标签: node.js mongodb timeout setinterval


    【解决方案1】:

    事件循环解释here

    当事件循环进入给定阶段时,它将执行特定于该阶段的任何操作,然后在该阶段的队列中执行回调,直到队列耗尽或已执行最大数量的回调。


    在每次迭代中,事件循环都会检查满足指定阈值(延迟)的预定计时器并执行它们的回调。因此,已注册计时器的延迟幅度应该无关紧要。

    但是,在您的场景中,您可能会意外注册冗余或无效的计时器(可能在从崩溃中恢复之后)。 MongoDB supports (automatic) data expiration。您可以指示 MongoDB 在经过指定的秒数后删除文档。这似乎与您想要做的很接近。

    【讨论】:

    • 感谢您的回答。我认为我将不得不坚持第一个选项,即超时,因为我需要知道何时以及哪些投票被删除。我不知道如果 mongodb 只是删除我的投票。不幸的是,我无法在集合上使用更改流,因为我没有副本集。
    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    相关资源
    最近更新 更多