黄p网站_在线看中文字幕_亚洲电影免费观看_成人激情视频_欧美成视频_中国av在线

定時(shí)任務(wù)

開(kāi)發(fā)者執(zhí)行定時(shí)任務(wù)會(huì)通過(guò) Linux 的 Crontab 去實(shí)現(xiàn),不方便去管理。EasySwoole 提供了根據(jù) LinuxCrontab 規(guī)則的定時(shí)任務(wù),最小粒度為1分鐘。

注意:舊版本(3.5.x 之前版本)的定時(shí)任務(wù)的使用請(qǐng)查看 舊版本(3.5.x之前)定時(shí)任務(wù)

創(chuàng)建一個(gè)定時(shí)任務(wù)

需要定義一個(gè)定時(shí)任務(wù)類(lèi)實(shí)現(xiàn) \EasySwoole\Crontab\JobInterface 接口。

定義執(zhí)行規(guī)則

public function crontabRule(): string
{
    // 定義執(zhí)行規(guī)則 根據(jù)Crontab來(lái)定義
    return '*/1 * * * *';
}

定義 Crontab 名稱(chēng)

public function jobName(): string
{
    // 定時(shí)任務(wù)的名稱(chēng)
    return 'CustomCrontab';
}

定義執(zhí)行邏輯

public function run()
{
    // 定時(shí)任務(wù)的執(zhí)行邏輯

    // 開(kāi)發(fā)者可投遞給task異步處理
    TaskManager::getInstance()->async(function (){
        // todo some thing
    });
}

定義異常捕獲

public function onException(\Throwable $throwable)
{
    // 捕獲run方法內(nèi)所拋出的異常
}

注冊(cè) Crontab

EasySwoole 框架全局的 mainServerCreate 事件(即項(xiàng)目根目錄的 EasySwooleEvent.php 文件的 mainServerCreate 方法中)中進(jìn)行定時(shí)任務(wù)注冊(cè)。

public static function mainServerCreate(EventRegister $register)
{
    // 配置定時(shí)任務(wù)
    $crontabConfig = new \EasySwoole\Crontab\Config();

    // 1.設(shè)置執(zhí)行定時(shí)任務(wù)的 socket 服務(wù)的 socket 文件存放的位置,默認(rèn)值為 當(dāng)前文件所在目錄
    // 這里設(shè)置為框架的 Temp 目錄
    $crontabConfig->setTempDir(EASYSWOOLE_TEMP_DIR);

    // 2.設(shè)置執(zhí)行定時(shí)任務(wù)的 socket 服務(wù)的名稱(chēng),默認(rèn)值為 'EasySwoole'
    $crontabConfig->setServerName('EasySwoole');

    // 3.設(shè)置用來(lái)執(zhí)行定時(shí)任務(wù)的 worker 進(jìn)程數(shù),默認(rèn)值為 3
    $crontabConfig->setWorkerNum(3);

    // 4.設(shè)置定時(shí)任務(wù)執(zhí)行出現(xiàn)異常的異常捕獲回調(diào)
    $crontabConfig->setOnException(function (\Throwable $throwable) {
        // 定時(shí)任務(wù)執(zhí)行發(fā)生異常時(shí)觸發(fā)(如果未在定時(shí)任務(wù)類(lèi)的 onException 中進(jìn)行捕獲異常則會(huì)觸發(fā)此異常回調(diào))
    });

    // 創(chuàng)建定時(shí)任務(wù)實(shí)例
    $crontab = \EasySwoole\EasySwoole\Crontab\Crontab::getInstance($crontabConfig);

    // 注冊(cè)定時(shí)任務(wù)
    $crontab->register(new \App\Crontab\CustomCrontab());
}

完整使用示例代碼

在 EasySwoole 中使用

1.定義定時(shí)任務(wù)類(lèi),新增 \App\Crontab\CustomCrontab 文件,文件內(nèi)容如下:

<?php

namespace App\Crontab;

use EasySwoole\Crontab\JobInterface;

class CustomCrontab implements JobInterface
{
    public function jobName(): string
    {
        // 定時(shí)任務(wù)的名稱(chēng)
        return 'CustomCrontab';
    }

    public function crontabRule(): string
    {
        // 定義執(zhí)行規(guī)則 根據(jù) Crontab 來(lái)定義
        // 這里是每分鐘執(zhí)行 1 次
        return '*/1 * * * *';
    }

    public function run()
    {
        // 定時(shí)任務(wù)的執(zhí)行邏輯

        // 相當(dāng)于每分鐘打印1次時(shí)間戳,這里只是參考示例。
        echo time();
    }

    public function onException(\Throwable $throwable)
    {
        // 捕獲 run 方法內(nèi)所拋出的異常
    }
}

2.注冊(cè)定時(shí)任務(wù),在 EasySwoole 框架全局的 mainServerCreate 事件(即項(xiàng)目根目錄的 EasySwooleEvent.php 文件的 mainServerCreate 方法中)中進(jìn)行定時(shí)任務(wù)注冊(cè),如下所示:

<?php

namespace EasySwoole\EasySwoole;

use App\Crontab\CustomCrontab;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\EasySwoole\Crontab\Crontab;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');
    }

    public static function mainServerCreate(EventRegister $register)
    {
        ###### 注冊(cè)一個(gè)定時(shí)任務(wù) ######
        // 配置定時(shí)任務(wù)
        $crontabConfig = new \EasySwoole\Crontab\Config();

        // 1.設(shè)置執(zhí)行定時(shí)任務(wù)的 socket 服務(wù)的 socket 文件存放的位置,默認(rèn)值為 當(dāng)前文件所在目錄
        // 這里設(shè)置為框架的 Temp 目錄
        $crontabConfig->setTempDir(EASYSWOOLE_TEMP_DIR);

        // 2.設(shè)置執(zhí)行定時(shí)任務(wù)的 socket 服務(wù)的名稱(chēng),默認(rèn)值為 'EasySwoole'
        $crontabConfig->setServerName('EasySwoole');

        // 3.設(shè)置用來(lái)執(zhí)行定時(shí)任務(wù)的 worker 進(jìn)程數(shù),默認(rèn)值為 3
        $crontabConfig->setWorkerNum(3);

        // 4.設(shè)置定時(shí)任務(wù)執(zhí)行出現(xiàn)異常的異常捕獲回調(diào)
        $crontabConfig->setOnException(function (\Throwable $throwable) {
            // 定時(shí)任務(wù)執(zhí)行發(fā)生異常時(shí)觸發(fā)(如果未在定時(shí)任務(wù)類(lèi)的 onException 中進(jìn)行捕獲異常則會(huì)觸發(fā)此異常回調(diào))
        });

        // 創(chuàng)建定時(shí)任務(wù)實(shí)例
        $crontab = \EasySwoole\EasySwoole\Crontab\Crontab::getInstance($crontabConfig);

        // 注冊(cè)定時(shí)任務(wù)
        $crontab->register(new CustomCrontab());
    }
}

在 Swoole 中使用

<?php
use EasySwoole\Crontab\JobInterface;

require_once __DIR__ . '/vendor/autoload.php';

$http = new Swoole\Http\Server('0.0.0.0', 9501);

class JobPerMin implements JobInterface
{
    public function jobName(): string
    {
        return 'JobPerMin';
    }

    public function crontabRule(): string
    {
        return '*/1 * * * *';
    }

    public function run()
    {
        var_dump(time());
        return time();
    }

    public function onException(\Throwable $throwable)
    {
        throw $throwable;
    }
}

// 配置及注冊(cè)定時(shí)任務(wù)
$crontab = \EasySwoole\EasySwoole\Crontab\Crontab::getInstance();
$crontab->register(new JobPerMin());
$crontab->attachToServer($http);

$http->on('request', function ($request, $response) use ($crontab) {

    // 在 http 服務(wù)中直接觸發(fā)執(zhí)行定時(shí)任務(wù)
    $ret = $crontab->rightNow('JobPerMin');

    $response->header('Content-Type', 'text/plain');
    $response->end('Hello World ' . $ret);
});

$http->start();

Crontab 表達(dá)式

通用表達(dá)式:

    *    *    *    *    *
    -    -    -    -    -
    |    |    |    |    |
    |    |    |    |    |
    |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7)
    |    |    |    +---------- month (1 - 12)
    |    |    +--------------- day of month (1 - 31)
    |    +-------------------- hour (0 - 23)
    +------------------------- min (0 - 59)

特殊表達(dá)式:

@yearly                    每年一次 等同于(0 0 1 1 *) 
@annually                  每年一次 等同于(0 0 1 1 *)
@monthly                   每月一次 等同于(0 0 1 * *) 
@weekly                    每周一次 等同于(0 0 * * 0) 
@daily                     每日一次 等同于(0 0 * * *) 
@hourly                    每小時(shí)一次 等同于(0 * * * *)
主站蜘蛛池模板: 精品一区二区在线播放 | 欧美日韩高清 | 亚洲三级视频 | 久久99久久久久久 | 亚州av| 国产一级片 | 热久久这里只有精品 | 中文字幕毛片 | 国产精品一区一区三区 | 精品国产1区2区3区 在线国产视频 | 五月婷婷激情 | 成人免费在线观看视频 | 91精品国产91综合久久蜜臀 | 成人国产精品久久久 | 一区二区三区在线免费播放 | 国产伦精品一区二区三区四区视频 | 免费av播放 | 成人精品免费视频 | 亚洲一区久久 | 免费啪啪网站 | 久久综合狠狠综合久久综合88 | 国产亚洲一区二区三区在线观看 | 美女在线视频一区二区 | 日日骚 | 欧美日韩一区二区在线观看 | 欧美,日韩,国产精品免费观看 | 精品国产一区二区三区成人影院 | 欧美经典一区 | 欧美成人一区二区三区 | 亚洲免费视频观看 | 国产精品国产三级国产aⅴ入口 | 亚洲欧洲一区二区三区 | 国产999精品久久久久久 | 一区二区在线免费观看 | 91精品国产乱码久久久久久久久 | 精品在线一区二区三区 | 无套内谢孕妇毛片免费看红桃影视 | 亚洲一区二区三区视频 | 欧美一二三四成人免费视频 | 日本中文在线 | 亚洲一区在线日韩在线深爱 |