Pomelo定时任务

Pomelo定时任务

制作定时任务可以使用cron来实现,具体的可以网上搜索“cron定时任务”。这里介绍在Pomelo中如何实现定时任务。

编写任务

在项目game-server/app/servers下面新建一个“servertask”文件夹(文件夹名称任意),在servertask下新建一个“cron”文件夹,在cron文件夹下新建一个名为“servertaskCron.js”的代码文件,servertaskCron代码如下:

var schedule = require('node-schedule');

module.exports = function(app) {  
  return new Cron(app);  
};  

var Cron = function(app) {  
  this.app = app;  
};  
  
  
/**
 * 清空每日任务数据
 */
Cron.prototype.clearEveryDayTaskDatas = function() {  
    console.log('clearEveryDayTaskDatas:' + new Date());
};  

添加定时任务服务器配置

在game-server/config/servers.json中添加servertask的服务器配置:

"servertask": [
    {"id": "servertask-server-1", "host": "127.0.0.1", "port": 9000, "clientHost": "127.0.0.1", "clientPort": 9010}
]

添加服务器token

在新版本的Pomelo中,config目录下新增了一个adminServer.json配置,在里面添加一个servertask的配置,否则启动servertask的时候会提示注册服务器到master失败。

{
    "type": "servertask",
    "token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
}

token字段的值可以任意,用一个足够长的字符串或者所有服务器公用一个token也行,主要取决于你的服务器安全级别。

添加cron配置

在game-server/config目录下新建一个“crons.json”文件,配置如下:

{  
    "development":{  
         "servertask": [  
          {"id": 1, "time": "0 0/1 * * * *", "action": "servertaskCron.clearEveryDayTaskDatas"}  
          ]  
    },  
    "production":{  
          "servertask": [  
          {"id": 1, "time": "0 0/1 * * * *", "action": "servertaskCron.clearEveryDayTaskDatas"}  
          ]  
    }  
}  

id是定时任务在具体服务器的唯一标识,且不能在同一服务器中重复。
time是定时任务执行的具体时间,时间的定义跟linux的定时任务类似,一共包括7个字段,每个字段的具体定义如下:

"* * * * * * [command]"

action是具体执行任务方法,servertaskCron.clrearEveryDayTaskDatas则代表执行game-server/app/servers/servertask/cron/servertaskCron.js中的clearEveryDayTaskDatas方法。

定时任务时间定义格式

"* * * * * * [command]"
"秒 分 时 日 月 星期 [运行命令,可省略]"

秒的取值范围[0, 59]。
分的取值范围[0, 59]。
时的取值范围[0, 23]。
日的取值范围[1, 31]。
月的取值范围[0, 11]。
星期的取值范围[0, 6],0表示星期天。

*:表示任何时刻
,:表示分割
-:表示一个段,如第二端里: 1-5,就表示1到5点
/n: 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.

【在Pomelo里面用/1报错,改成0/1就可以了】*

运行测试

使用 pomelo start 启动服务器

运行定时任务输出日志

推荐阅读更多精彩内容