JianghuJS-定时任务

12002

1、概念

  • 什么是定时任务

定时任务指的是预先设定好执行时间,在特定时间或者间隔内执行特定操作或程序的任务。这些任务可以周期性地、定期地、或在特定的时间点触发执行。在软件开发中,定时任务通常用于处理重复性操作、自动化任务和计划任务。

  • 定时任务的需求背景

虽然我们通过框架开发的 HTTP Server 是请求响应模型的,但是仍然还会有许多场景需要执行一些定时任务,例如:

    1. 定时上报应用状态。
    1. 定时从远程接口更新本地缓存。
    1. 定时进行文件切割、临时文件删除。

框架提供了一套机制来让定时任务的编写和维护更加优雅。

2、JianghuJS 中的定时任务定义

  • 所在目录

所有的定时任务都统一存放在 app/schedule 目录下,每一个文件都是一个独立的定时任务,可以配置定时任务的属性和要执行的方法。

  • 定义方式

一个简单的例子,我们定义一个更新远程数据到内存缓存的定时任务,就可以在 app/schedule 目录下创建一个 update_cache.js 文件。

  1. module.exports = {
  2. schedule: {
  3. interval: '1m', // 1 分钟间隔
  4. type: 'all', // 指定所有的 worker 都需要执行
  5. },
  6. async task(ctx) {
  7. const res = await ctx.curl('http://www.api.com/cache', {
  8. dataType: 'json',
  9. });
  10. ctx.app.cache = res.data;
  11. },
  12. };

这个定时任务会在每一个 Worker 进程上每 1 分钟执行一次,将远程数据请求回来挂载到 app.cache 上。

3、编写定时任务

todo:更新远程数据到内存缓存的定时任务示例

在江湖应用程序的启动过程中,以下是应用程序的启动生命周期方法的详细列表(参考项目根目录 app.js ):

  1. configWillLoad:这个方法会在配置文件即将加载时调用,可以在这个方法中加载一些自定义的配置文件。
  2. configDidLoad:这个方法会在配置文件加载完成后调用,可以在这个方法中对加载好的配置文件进行一些操作。
  3. didLoad:这个方法会在应用程序启动时调用,可以在这个方法中进行一些初始化操作。
  4. willReady:这个方法会在应用程序启动时调用,可以在这个方法中加载一些插件或者其他依赖项。
  5. didReady:这个方法会在应用程序启动时调用,可以在这个方法中进行一些初始化完毕后的操作。
  6. serverDidReady:这个方法会在应用程序启动时调用,可以在这个方法中进行一些服务端启动完毕后的操作。
  7. beforeClose:这个方法会在应用程序关闭时调用,可以在这个方法中进行一些清理操作。