swoole设置定时器

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

swoole提供了类似JavaScript的setInterval/setTimeout异步高精度定时器,粒度为毫秒级。
https://wiki.swoole.com/wiki/page/480.html
<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
<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
<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系统中方便多了。

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信