定时任务
定时任务我们需要先使用rap启动一个定时任务服务器
配置
'app'=>[
'init'=>\rap\swoole\timer\TimerInit::class //配置为 TimerInit
],
'swoole_http'=>[ //http 服务不能少
'ip'=>'0.0.0.0',
'port'=>9501,
'document_root'=>ROOT_PATH,
'enable_static_handler'=>false,
'worker_num'=>20,
'task_worker_num'=>0,
'task_max_request'=>0
],
'timer'=>[
'secret'=>'这是通信密钥'
],
'cache'=>[ //配置缓存 只可以使用redis
'type'=>'redis',
'host' => '',
'port' => ,
'password' => '',
'select' => 1,
'timeout' => 0,
'expire' => -1,
'persistent' => false
]
启动服务器
php index.php http
主项目中
配置
'timer'=>[
'local'=>'local.net', //当前应用域名
'server'=>'server.net', //定时服务器域名
'secret'=>'这是通信密钥' //两边需要相同
]
使用
//参数说明 路径, 参数, 多久之后单位 s,请求时带的请求头
Timer::after('/test/a',['a'=>'1'],10,['tent-header'=>'test']);
回调方法里需要进行签名验证 防止恶意调用
Timer::checkSign($request);
为什么需要将定时器独立出来?主项目的经常会进行重启,正常缓存也是不需要进行持久化的,可以在特定时候清除全部缓存,而我们不希望这些操作会影响已添加好的定时器定时服务器重启时会对对之前没有执行的定时器进行重新加载