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系统中方便多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值