Swoole入门 第二个程序 timer定时任务
一、swoole 定时器
- Linux Crontab 最小时间粒度为分钟。
- PHP Swoole 最小时间粒度为毫秒。
- swoole_timer_tick() 间隔的时钟控制器
- swoole_timer_after() 指定的时间后执行
- swoole_timer_clear() 删除定时器
例子-可复制直接执行
//每隔3000ms 触发一次
$timer_id = swoole_timer_tick(3000, function(){
echo "tick 3000ms -你好timer ".date('Y-m-d H-i-s')."\n";
);
//9000ms后删除定时器
swoole_timer_after(9000, function () use($timer_id){
echo "after 9000ms - 再见 timer ".date(''Y-m-d H-i-s)."\n";
swoole_timer_clear($timer_id);
});
二、 架构图
三、开源项目 github.com/osgochina/swoole-cronta...
四、业务场景
- 系统日常监控
- 每天凌晨跑业务脚本,脚本中包括了请求其他业务方或第三方的接口,如果接口超时无响应或没有数据返回,需要进行重试。
- 定时任务处理半小时未支付订单
场景二代码(不能单独执行 仅示例):
$api_url = 'xxx'; //接口地址
$exec_num = 0; //执行次数
swoole_timer_tick(5*60*1000, function($timer_id) use ($api_url, &$exec_num) {
$exec_num ++ ;
$result = $this->requestUrl($api_url);
echo date('Y-m-d H:i:s'). " 执行任务中...(".$exec_num.")\n";
if ($result) {
//业务代码...
swoole_timer_clear($timer_id); // 停止定时器
echo date('Y-m-d H:i:s'). " 第(".$exec_num.")次请求接口任务执行成功\n";
} else {
if ($exec_num >= 5) {
swoole_timer_clear($timer_id); // 停止定时器
echo date('Y-m-d H:i:s'). " 请求接口失败,已失败5次,停止执行\n";
} else {
echo date('Y-m-d H:i:s'). " 请求接口失败,5分钟后再次尝试\n";
}
}
});
文章整理学习于github.com/xinliangnote/Swoole
个人博客停止维护,部分博客转载到这
- peter
- 2021-04-17 00:26:17
本作品采用《CC 协议》,转载必须注明作者和本文链接