easyswoole - 基于swoole扩展实现的一款高性能php框架

定時任務

開發者執行定時任務會通過 Linux 的 Crontab 去實現,不方便去管理。EasySwoole 提供了根據 LinuxCrontab 規則的定時任務,最小粒度為1分鐘。

注意:舊版本(3.5.x 之前版本)的定時任務的使用請查看 舊版本(3.5.x之前)定時任務

創建一個定時任務

需要定義一個定時任務類實現 \EasySwoole\Crontab\JobInterface 接口。

定義執行規則

public function crontabRule(): string
{
    // 定義執行規則 根據Crontab來定義
    return '*/1 * * * *';
}

定義 Crontab 名稱

public function jobName(): string
{
    // 定時任務的名稱
    return 'CustomCrontab';
}

定義執行邏輯

public function run()
{
    // 定時任務的執行邏輯

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

定義異常捕獲

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

注冊 Crontab

EasySwoole 框架全局的 mainServerCreate 事件(即項目根目錄的 EasySwooleEvent.php 文件的 mainServerCreate 方法中)中進行定時任務注冊。

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

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

    // 2.設置執行定時任務的 socket 服務的名稱,默認值為 'EasySwoole'
    $crontabConfig->setServerName('EasySwoole');

    // 3.設置用來執行定時任務的 worker 進程數,默認值為 3
    $crontabConfig->setWorkerNum(3);

    // 4.設置定時任務執行出現異常的異常捕獲回調
    $crontabConfig->setOnException(function (\Throwable $throwable) {
        // 定時任務執行發生異常時觸發(如果未在定時任務類的 onException 中進行捕獲異常則會觸發此異常回調)
    });

    // 創建定時任務實例
    $crontab = \EasySwoole\EasySwoole\Crontab\Crontab::getInstance($crontabConfig);

    // 注冊定時任務
    $crontab->register(new \App\Crontab\CustomCrontab());
}

完整使用示例代碼

在 EasySwoole 中使用

1.定義定時任務類,新增 \App\Crontab\CustomCrontab 文件,文件內容如下:

<?php

namespace App\Crontab;

use EasySwoole\Crontab\JobInterface;

class CustomCrontab implements JobInterface
{
    public function jobName(): string
    {
        // 定時任務的名稱
        return 'CustomCrontab';
    }

    public function crontabRule(): string
    {
        // 定義執行規則 根據 Crontab 來定義
        // 這里是每分鐘執行 1 次
        return '*/1 * * * *';
    }

    public function run()
    {
        // 定時任務的執行邏輯

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

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

2.注冊定時任務,在 EasySwoole 框架全局的 mainServerCreate 事件(即項目根目錄的 EasySwooleEvent.php 文件的 mainServerCreate 方法中)中進行定時任務注冊,如下所示:

<?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)
    {
        ###### 注冊一個定時任務 ######
        // 配置定時任務
        $crontabConfig = new \EasySwoole\Crontab\Config();

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

        // 2.設置執行定時任務的 socket 服務的名稱,默認值為 'EasySwoole'
        $crontabConfig->setServerName('EasySwoole');

        // 3.設置用來執行定時任務的 worker 進程數,默認值為 3
        $crontabConfig->setWorkerNum(3);

        // 4.設置定時任務執行出現異常的異常捕獲回調
        $crontabConfig->setOnException(function (\Throwable $throwable) {
            // 定時任務執行發生異常時觸發(如果未在定時任務類的 onException 中進行捕獲異常則會觸發此異常回調)
        });

        // 創建定時任務實例
        $crontab = \EasySwoole\EasySwoole\Crontab\Crontab::getInstance($crontabConfig);

        // 注冊定時任務
        $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;
    }
}

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

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

    // 在 http 服務中直接觸發執行定時任務
    $ret = $crontab->rightNow('JobPerMin');

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

$http->start();

Crontab 表達式

通用表達式:

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

特殊表達式:

@yearly                    每年一次 等同于(0 0 1 1 *) 
@annually                  每年一次 等同于(0 0 1 1 *)
@monthly                   每月一次 等同于(0 0 1 * *) 
@weekly                    每周一次 等同于(0 0 * * 0) 
@daily                     每日一次 等同于(0 0 * * *) 
@hourly                    每小時一次 等同于(0 * * * *)
主站蜘蛛池模板: 吸气式感烟火灾探测器|极早期烟雾系统|空气采样报警|拓普兰 | 潍坊沃林机械设备有限公司-牵引式风送果园打药机,悬挂式风送果园喷雾机,自走式果树喷药机,车载式风送远程喷雾机-潍坊沃林机械设备有限公司-牵引式风送果园打药机,悬挂式风送果园喷雾机,自走式果树喷药机,车载式风送远程喷雾机 潍坊网络推广,临沂360推广,东营360推广,枣庄360推广,潍坊网站建设,潍坊网络公司,潍坊360搜索,潍坊APP开发,潍坊360推广,潍坊360代理,潍坊点睛网络科技有限公司 | 上海中泉泵业制造有限公司-柴油机泵,一体化泵站,柴油机消防泵,泵站,预制一体化泵站 | 新东方大学考试官网_考研/英语/雅思/托福/四六级/日语/韩语/教资在线网课官网 | 涡街流量计罗茨气体涡轮厂家_衡水多元仪表有限公司 | 玉米加工机械_玉米加工设备_玉米深加工机械_玉米糁加工设备--滑县鑫丰粮油机械有限公司 | 水热反应釜厂家_水热反应釜价格_水热合成反应釜批发-仪贝尔仪器 - 水热釜,水热反应釜,水热反应釜厂家,水热反应釜价格,水热反应釜型号,水热反应釜内衬,水热反应釜25ml,水热反应釜50ml,水热反应釜100ml,水热合成反应釜 | 搅拌器「厂家直销」-淄博亿贝化工设备有限公司 | 银泰洁净--净化工程总承包,20年精耕细作,专为净化而来_银泰洁净--净化工程总承包,20年精耕细作,专为净化而来 | 济宁山银煤矿机械有限公司,钻采工具,防爆电器,凿岩机械,风动工具,矿山机械,建筑机械,支护设备,通风防尘,铁路设备,仪器仪表,大型设备,矿用泵,钎具类,消防类,矿车类,配件区类 | 户外工程照明|洗墙灯厂家|聚翔(广东)照明科技有限公司 | 无锡防火门-防火窗-防火卷帘门-福臣门业科技有限公司 | 天津网站制作|网站建设|营销型网站建设|筑美网络---天津做网站公司 | 桥梁支座更换_桥梁检测车租赁_高空作业车出租_支座更换_伸缩缝安装_隧道防水_养护加固_维修_出租_衡水庆兴桥梁养护工程有限公司 桥梁养护|桥梁维修加固|隧道裂缝修补|支座更换|管道堵水气囊|衡水众拓路桥养护有限公司 | 亿企商贸-亿万企业的商务贸易平台-B2B企业产品发布供求信息平台,一带一路中国企业及产品展示平台,免费企业智能自助建站网络营销推广平台,打造B2B企业黄页产品信息发布推广专业综合电子商务平台! | 纸袋机|多层纸袋机|高速纸袋机|无锡市天天友情机械有限公司 | 欧美日韩人妻精品一区二区三区_欧美成人精品欧美一级乱黄_亚洲欧美日韩高清一区二区三区_国产一级做a爰片久久毛片_日韩一级视频在线观看播放_精品一区二区三区免费毛片爱_完整观看高清秒播国内外精品资源 | 舞台阻燃幕布_舞台幕布_舞台吊杆_舞台机械_TYWT-泰州通用舞台设备有限公司 | 西安网站建设,西安网站设计制作,西安短视频拍摄_短视频运营就选动力无限网络推广公司 | 郑州房产律师|专业房地产纠纷律师热线_河南锦盾律师事务所 | 济南塑料袋,食品包装袋,复合塑料袋,方便袋-济南精美塑料包装厂 | 液压油缸生产厂家-常州辰佰液压机械有限公司 | 河北高新技术企业认定,沧州商标注册,沧州9001质量管理体系认证,沧州高新技术企业认定,沧州体系认证,沧州商标续展,沧州版权登记,河北国瑞企业管理咨询有限公司 | 指挥调度|调度系统|应急指挥调度|应急指挥|可视化调度|多媒体指挥调度|融合通信|综合调度|应急指挥系统|IP调度系统-北京瑞光极远数码科技有限公司 | 华药药业集团|华药修医师|修医师浸膏|河南华药药业有限公司 | 西安西雷脉冲功率技术有限公司-高压调制器/加速器与脉冲功率系统的研发/生产/应用推广/高压脉冲电源的应用研究/设计/生产和销售/高功率脉冲器件/材料与仪器设备的研发/生产和销售/高电压/大电流/强磁场环境的模拟及测试服务/会议会展服务/货物及进出口的业务/脉冲功率技术领域类的技术转让 | 钻床,数控钻床,摇臂钻床,立式钻床_滕州市高地机床有限公司 | 清洁公司| 保洁公司| 东莞清洁| 东莞保洁|壹壹清洁 | 河南郑州纯净水设备_厂家_价格_河南江宇环保科技有限公司水处理设备工厂 | 收银系统_收银机_pos收款机_门店管理系统-客如云 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 有源滤波器-高压无功补偿装置-高压无功补偿柜-10KV电容柜-安徽众升电力科技有限公司 | 武汉凯美隆窗帘厂家_定做商用窗帘_家用遮阳帘_涵盖电动窗帘_天棚帘_遮阳棚_凯美隆-专注遮阳产品 武汉净化机-武汉全热新风换气机-武汉静音送风机-武汉东信新风节能设备有限公司 | 九江市京邦玻纤有限公司| 吸污车|吸粪车|冷藏车|消防车|清障车|环卫垃圾车价格|湖北程力汽车集团厂家销售公司 | 郑州腾飞建设工程集团有限公司| 沈阳机电一体化电热锅炉_沈阳蓄热式电锅炉_沈阳壁挂式电锅炉【沈阳远鹏电热供水设备工程安装有限公司】 | 无锡大型数控龙门铣加工中心,精密焊接件制造,机械设备加工-无锡嘉迅机械科技有限公司 | 康复支具-医用颈托-辅助固定矫形器-骨折固定带生产厂家-安平县康信医疗器械有限公司 | 深圳潜水培训-潜水考证-公共安全潜水-救援潜水【深圳超潜潜水】 深圳汽车贴膜_深圳全车车身改色贴膜|UPPF隐形车衣官网 | 全自动高速点胶机,锡膏喷印机系列,点胶阀核心配件厂家-博宁 |