swoole基础之毫秒定时器

本文介绍Swoole提供的毫秒级定时器功能,包括swoole_timer_tick、swoole_timer_after和swoole_timer_clear三个函数,解决了传统crontab只能分钟级定时的问题,适用于需要更精确时间控制的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在平常的开发中,我们最常用的方式处理,是使用linux提供的crontab功能进行定时处理.但是很明显它有一个缺陷,那就是时间的粒度只能是分钟级别的,如果想使用秒级的就不行了,这个时候我们的基于swoole的毫秒定时器就可以很好的解决这个问题.

 

       系统提供了三个函数供调用: swoole_timer_tick,swoole_timer_after,swoole_timer_clear

        swoole_timer_tick:

设置一个间隔时钟定时器,与after定时器不同的是tick定时器会持续触发,直到调用swoole_timer_clear清除。

int swoole_timer_tick(int $msec, callable $callback);
$msec 指定时间,单位为毫秒。如1000表示1秒,最大不得超过 86400000
$callback_function 时间到期后所执行的函数,必须是可以调用的
可以使用匿名函数的use语法传递参数到回调函数中
定时器仅在当前进程空间内有效
定时器是纯异步实现的,不能与阻塞IO的函数一起使用,否则定时器的执行时间会发生错乱

定时器在执行的过程中可能存在一定误差

            允许传递一个timer_id供时钟销毁使用

 

        swoole_timer_after:

在指定的时间后执行函数,需要1.7.7或更高版本。

int swoole_timer_after(int $after_time_ms, mixed $callback_function);
swoole_timer_after函数是一个一次性定时器,执行完成后就会销毁。此函数与PHP标准库提供的sleep函数不同,after是非阻塞的。而sleep调用后会导致当前的进程进入阻塞,将无法处理新的请求。

执行成功返回定时器ID,若取消定时器,可调用 swoole_timer_clear

$after_time_ms 指定时间,单位为毫秒,最大不得超过 86400000
$callback_function 时间到期后所执行的函数,必须是可以调用的。
可以使用匿名函数的use语法传递参数到回调函数中

 

        swoole_timer_clear:

使用定时器ID来删除定时器。

bool swoole_timer_clear(int $timer_id)
$timer_id,定时器ID,调用swoole_timer_tick、swoole_timer_after后会返回一个整数的ID
swoole_timer_clear不能用于清除其他进程的定时器,只作用于当前进程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值