作者:一大书虫 | 来源:互联网 | 2023-06-18 14:29
swoole设置定时器思考:比如新闻排行榜、商品排行榜,一般都不是即时生成的。(因为数据量大、并发高)那么怎么做呢?1、结合消息队列触发后台一个任务2、结合定时任务
swoole设置定时器
思考:
比如新闻排行榜、商品排行榜,一般都不是即时生成的。(因为数据量大、并发高)
那么怎么做呢?
1、结合消息队列触发后台一个任务
2、结合定时任务,定时生成一些静态资源
swoole提供了类似Javascript的setInterval
/setTimeout
异步高精度定时器,粒度为毫秒级。
https://wiki.swoole.com/wiki/page/480.html
我们来简单测试一下:
$serv = new swoole_server("10.211.55.17",9501); $serv->on("WorkerStart",function ($serv,$woker_id){ if ($woker_id == 0){ 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.php
中 use 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系统中方便多了。