swoole设置定时器、easyswoole框架 の Crontab定时器

swoole设置定时器

思考:
比如新闻排行榜、商品排行榜,一般都不是即时生成的。(因为数据量大、并发高)
那么怎么做呢?
1、结合消息队列触发后台一个任务
2、结合定时任务,定时生成一些静态资源

swoole提供了类似JavaScript的setInterval/setTimeout异步高精度定时器,粒度为毫秒级。
https://wiki.swoole.com/wiki/page/480.html

我们来简单测试一下:

<?php

$serv = new swoole_server("10.211.55.17",9501);

$serv->on("WorkerStart",function ($serv,$woker_id){
    if ($woker_id == 0){

        //每隔1000ms触发一次
        swoole_timer_tick(1000, function ($timer_id) {
            echo "hello\n";
        });

    }
});

$serv->on("receive",function ($serv,$fd,$from_id,$data){
    $serv->send($fd,"Server:".$data);
});

$serv->start();

这里写图片描述
果然是每1秒钟(1000毫米)打印一次hello

easyswoole定时器

easyswoole框架中对原生的毫秒级定时器进行了封装,以便开发者快速调用 Swoole 的原生定时器。
文档地址:
https://www.easyswoole.com/Manual/2.x/Cn/_book/Advanced/timer.html

Crontab 定时器

EasySwoole支持用户根据Crontab规则去添加定时器。时间最小粒度是1分钟。
文档地址:
https://www.easyswoole.com/Manual/2.x/Cn/_book/Component/crontab.html

EasySwooleEvent.phpuse EasySwoole\Core\Component\Crontab\CronTab;

    public static function mainServerCreate(ServerManager $server,EventRegister $register): void
    {

        CronTab::getInstance()->addRule('test1','@daily',function (){
            //每天执行的任务
            //... 比如统计前一天销售最好的商品
            // 这这里完成统计查询写入数据库
        })->addRule('test2','*/1 * * * *',function (){
            //每一分钟执行的任务
            //...比如订单超时状态的监控
        });
    }

能在程序代码里写Crontab计划任务 比在linux系统中方便多了。

猜你喜欢

转载自blog.csdn.net/github_26672553/article/details/80687923