【问题标题】:Call NodeJs function at a specific moment in time在特定时间调用 NodeJs 函数
【发布时间】:2016-04-22 21:20:45
【问题描述】:

有没有办法自动化函数并使用 Node.Js 在特定时刻及时调用它们?更准确地说,我想用 node js 创建一个提醒。当我收到用户的日期时,我必须发送通知以提醒他/她一些事情。

我知道 setTimeout() 函数,但是当我拥有大型用户数据库时,这真的是个好主意吗?

谢谢。

【问题讨论】:

  • 我会将通知例程转换为微服务,并让 cron 作业执行该服务,该服务在运行时查找要发送的通知,一旦发送就将其清除。这样,如果服务器重新启动,您将不会丢失 setTimeouts。
  • 好主意,非常感谢

标签: javascript node.js task


【解决方案1】:

您可以使用setTimeout() 并将所有工作保留在您的服务器中,但对于大量用户,您不一定要为每个用户设置超时。您真正需要的只是下一个需要通知的用户的一次超时。当该计时器触发时,您然后为需要通知的下一个用户设置一个计时器,依此类推。

这可以通过按通知时间排序的对象数组来完成。每次向数组中添加内容时,您都会取消当前计时器,将新通知添加到数组中,对数组进行排序并设置最早通知的计时器。

当计时器触发时,您从数组中删除该项目并安排下一个。

而且,由于您可能希望它在服务器重新启动后仍然存在,因此您每次修改通知数组(可能是 JSON 格式)到一个文件或数据库中,这样您就可以在服务器重新启动时重新加载该数据。

仅供参考,如果您希望获取其他人已经编写的代码,node.js 的调度模块已经提供了这种类型的功能。

其中一些模块的示例:

node-cron

agenda

node-schedule

【讨论】:

    【解决方案2】:

    您要查找的内容称为调度程序或 cron 作业(其来源来自 Linux 操作系统)。

    在 NodeJS 中,您可以找到实现相同想法的 node-schedule

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-07
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2016-04-11
      • 1970-01-01
      相关资源
      最近更新 更多