环境:Centos6.4,PHP环境:PHP7,Swoole2.1(在指定的时间后执行函数,需要1.7.7或更高版本)

<?php 
//---------------------------------------------------swoole_timer_tick--------------------------------------------------// 
//设置一个间隔时钟定时器,与after定时器不同的是tick定时器会持续触发,直到调用swoole_timer_clear清除。 
//int swoole_timer_tick(int $ms, callable $callback, mixed $user_param); 
//$ms 指定时间,单位为毫秒 
//$callback_function 时间到期后所执行的函数,必须是可以调用的。 
//$user_param 用户参数, 该参数会被传递到$callback_function中. 如果有多个参数可以使用数组形式. 也可以使用匿名函数的use语法传递参数到回调函数中 
//定时器仅在当前进程空间内有效 
//定时器是纯异步实现的,不能与阻塞IO的函数一起使用,否则定时器的执行时间会发生错乱 
//$ms 最大不得超过 86400000 
//tick定时器在1.7.14以上版本可用 
//定时器在执行的过程中可能会产生微小的偏差,请勿基于定时器实现精确时间计算 
swoole_timer_tick(2000, function ($timer_id) {  //每隔2000ms触发一次 
    echo "tick-2000ms\n"; 
 
}); 
//---------------------------------------------------swoole_timer_after--------------------------------------------------// 
//swoole_timer_after函数是一个一次性定时器,执行完成后就会销毁。此函数与PHP标准库提供的sleep函数不同,after是非阻塞的。而sleep调用后会导致当前的进程进入阻塞,将无法处理新的请求。 
 
//执行成功返回定时器ID,若取消定时器,可调用 swoole_timer_clear 
//int swoole_timer_after(int $after_time_ms, mixed $callback_function, mixed $user_param); 
//$after_time_ms 指定时间,单位为毫秒,最大不得超过 86400000 
//$callback_function 时间到期后所执行的函数,必须是可以调用的。 
//$user_param 用户参数, 该参数会被传递到$callback_function中. 如果有多个参数可以使用数组形式. 也可以使用匿名函数的use语法传递参数到回调函数中 
 
swoole_timer_after(3000, function () {  //3000ms后执行此函数 
    echo "after 3000ms.\n"; 
}); 
 
//--------------------------------------------------swoole_timer_clear---------------------------------------------------// 
//清除定时器 
//使用定时器ID来删除定时器。 
//bool swoole_timer_clear(int $timer_id) 
//$timer_id,定时器ID,调用swoole_timer_tick、swoole_timer_after后会返回一个整数的ID 
//swoole_timer_clear不能用于清除其他进程的定时器,只作用于当前进程 
$timer = swoole_timer_after(1000, function(){ 
    echo "timeout\n"; 
}); 
 
var_dump(swoole_timer_clear($timer)); 
var_dump($timer); 
 
// 输出:bool(true) int(1) 
// 不输出:timeout

 

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Swoole学习(七)Swoole之异步TCP服务器的创建详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。