Swoole基础——06 (异步)定时器、延时器

本文介绍了Swoole的毫秒级定时器和延时器,包括如何设置定时器和延时器,回调函数的参数说明,以及清除定时器的方法。Swoole的定时器提供了比Linux crontab更精确的定时能力,并且定时器函数是非阻塞的,不会影响进程处理其他请求。

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


概述

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不能用于清除其他进程的定时器,只作用于当前进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值