秒級定時任務
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)
{
}
}