概述
linux也有定时器crontab,但是它最小只能精确到分。而swoole内置的定时器,可以做到毫秒级别。
使用
1. 设置一个定时器
swoole_timer_tick(int $msec, callable $callback [, mixed $user_param]);
回调函数
定时器触发的回调函数接受2个参数。
function callbackFunction(int $timer_id [, mixed $params]);
-
$timer_id 定时器的ID,可用于swoole_timer_clear清除此定时器
-
$params 由swoole_timer_tick传入的第三个参数
示例
if($request->fd == 9){
swoole_timer_tick(2000,function($timer_id){
echo "我是小调皮,每2秒出现一次\n";
});
}
2. 设置一个延时器
swoole_timer_after(int $after_time_ms, mixed $callback_function);
-
$after_time_ms :指定时间,单位为毫秒,最大不得超过 86400000
-
$callback_function :时间到期后所执行的函数,必须是可以调用的。
-
可以使用匿名函数的use语法传递参数到回调函数中
swoole_timer_after函数是一个一次性定时器,执行完成后就会销毁。
此函数与PHP标准库提供的sleep函数不同,after是非阻塞的。而sleep调用后会导致当前的进程进入阻塞,将无法处理新的请求。
执行成功返回定时器ID,若取消定时器,可调用 swoole_timer_clear()。
示例
$timer = swoole_timer_after(1000, function(){
echo "timeout\n";
});
swoole_timer_clear($timer);
3. 清除定时器
swoole_timer_clear(int $timer_id)
- $timer_id:定时器ID,调用swoole_timer_tick、swoole_timer_after后会返回一个整数的ID。
swoole_timer_clear不能用于清除其他进程的定时器,只作用于当前进程。