秒级定时任务
EasySwoole
没有直接提供最小粒度为秒级的定时任务,但是可以变相实现。使用 EasySwoole
的自定义进程组件 + 协程 Sleep 即可实现,使用方式如下:
创建一个秒级定时任务类(自定义进程类)
定义一个自定义进程类继承 \EasySwoole\Component\Process\AbstractProcess
父类,如下所示,新建一个文件 \App\Crontab\SecondCrontab
:
<?php
namespace App\Crontab;
use EasySwoole\Component\Process\AbstractProcess;
class SecondCrontab extends AbstractProcess
{
protected function run($arg)
{
while(1) {
// 这里写执行逻辑
// to do something.
// 这里表示每秒打印一个日期时间字符串,仅供参考
var_dump(date('Y-m-d H:i:s'));
// 休息1秒
\Co::sleep(1);
}
}
}
注册秒级定时任务
在 EasySwoole
框架全局的 mainServerCreate
事件(即项目根目录的 EasySwooleEvent.php
文件的 mainServerCreate
方法中)中进行秒级定时任务注册。
<?php
namespace EasySwoole\EasySwoole;
use App\Crontab\SecondCrontab;
use EasySwoole\Component\Process\Manager;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
class EasySwooleEvent implements Event
{
public static function initialize()
{
date_default_timezone_set('Asia/Shanghai');
###### 注册秒级定时任务 ######
$process = new SecondCrontab(new \EasySwoole\Component\Process\Config([
'enableCoroutine' => true
]));
Manager::getInstance()->addProcess($process);
}
public static function mainServerCreate(EventRegister $register)
{
}
}