X 分钟架构中的 NodeJS 运行 代码
NodeJS run code in X minutes architecture
我想安排一些代码在可变时间 运行。例如,60 分钟后,我想向端点发送 HTTP 请求并更新数据库文档,但我还希望能够取消该代码 运行 如果在该 60 分钟之前发生操作。
构建它的最佳方法是什么?我希望它能够在服务器重新启动后继续运行,并且在我的应用跨多个服务器扩展时也能正常工作。
谢谢!
您可以为此使用 setTimeout()
并保存它 returns 的计时器 ID,因为您随后可以使用该计时器 ID 取消计时器。要安排计时器:
var timer = setTimeout(myFunc, 60 * 60 * 1000);
然后,在计时器触发之前的某个时间,您可以通过以下方式取消计时器:
clearTimeout(timer);
如果你想在服务器重启后存活下来,那么你还需要将你希望计时器触发的实际系统时间保存到一些持久存储中(比如磁盘或数据库上的配置文件)。然后,当您的服务器启动时,您从持久存储中读取该值,如果已设置,则设置一个将在那时触发的新 setTimeout()
。同样,当计时器触发或您因为不再需要它而清除计时器时,您会更新持久存储,这样就不会再有未来的时间存储在那里。
您可以通过创建一个 persistentTimer
对象来使这一切变得相当干净,该对象具有设置计时器、清除计时器和在服务器重新启动时从您正在使用的任何持久存储进行初始化的方法。
我想安排一些代码在可变时间 运行。例如,60 分钟后,我想向端点发送 HTTP 请求并更新数据库文档,但我还希望能够取消该代码 运行 如果在该 60 分钟之前发生操作。
构建它的最佳方法是什么?我希望它能够在服务器重新启动后继续运行,并且在我的应用跨多个服务器扩展时也能正常工作。
谢谢!
您可以为此使用 setTimeout()
并保存它 returns 的计时器 ID,因为您随后可以使用该计时器 ID 取消计时器。要安排计时器:
var timer = setTimeout(myFunc, 60 * 60 * 1000);
然后,在计时器触发之前的某个时间,您可以通过以下方式取消计时器:
clearTimeout(timer);
如果你想在服务器重启后存活下来,那么你还需要将你希望计时器触发的实际系统时间保存到一些持久存储中(比如磁盘或数据库上的配置文件)。然后,当您的服务器启动时,您从持久存储中读取该值,如果已设置,则设置一个将在那时触发的新 setTimeout()
。同样,当计时器触发或您因为不再需要它而清除计时器时,您会更新持久存储,这样就不会再有未来的时间存储在那里。
您可以通过创建一个 persistentTimer
对象来使这一切变得相当干净,该对象具有设置计时器、清除计时器和在服务器重新启动时从您正在使用的任何持久存储进行初始化的方法。