thinkphp5定时任务如何采用workerman进行设计支持每天执行以及corn表达式
1、首先通过 composer 安装workerman,在thinkphp5完全开发手册的扩展-》composer包-》workerman有详细说明:
在项目根目录执行以下指令<br>composer require topthink/think-worker
在项目根目录执行以下指令<br>composer require topthink/think-worker
2.在项目根目录创建服务启动文件 server.php:
<?php
define('APP_PATH', __DIR__ . '/application/');
define("BIND_MODULE", "server/Worker");
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';
3、在application里创建server模块,并在server里创建控制器 Worker.php:
<?php
namespace app\server\controller;
use think\worker\Server;
class Worker extends Server
{
protected $processes=1;
public function onWorkerStart($work)
{
$handle=new Index();
$handle->add_timer();
}
}
4.创建Index.php类.定义一个每秒钟执行一次的定时器,在定时器里增加条件判断,当当前时间等于要执行的时间时,就执行此任务
<?php
namespace app\server\controller;
use Workerman\Lib\Timer;
class Index
{
public function add_timer(){
Timer::add(1, array($this, 'index'), array(), true);
}
public function index(){
//每天0点执行任务
if(time()/86400===0){
echo date("Y-m-d H:i:s");
}
//每天8点执行任务
if(time()/86400===28800){
echo date("Y-m-d H:i:s");
}
}
5、启动服务 php server.php start -d
如果想要使用corn表达式,则在add_timer里面将corn表达式解析一下,然后转换成对应的逻辑就可以了,这样corn表达式也可以支持了,是不是很灵活呢!