当前位置: 首页 > 工具软件 > php-timer > 使用案例 >

Swoole 中毫秒定时器(Timer)的使用,php swoole毫秒定时器,Swoole\Timer

陈飞
2023-12-01
函数tick:设置一个间隔时钟定时器,这个定时器会持续触发
函数after():在指定的时间后执行函数。一次性定时器,执行完成后会自动销毁。
函数clear():使用定时器 ID 来删除定时器。(只作用于当前进程)
函数clearAll():清除当前 Worker 进程内的所有定时器。
函数info():返回 timer 的信息
函数list():返回定时器迭代器, 可使用foreach遍历全局所有timer的id
函数stat():查看定时器状态。
函数set():设置定时器相关参数。
// 1. 函数tick:设置一个间隔时钟定时器,这个定时器会持续触发
//    int Swoole\Timer::tick(int $msec, callable $callback, ...$params);
//        $mesc:指定时间,单位毫秒
//        $callback_function:时间到期后所执行的函数,必须是可以调用的
//        $params:给执行函数传递数据
//
//    function callbackFunction(int $timer_id, ...$params);
//        timer_id 定时器的ID,可用于Timer::clear清除此定时器
//        $params  由Timer::tick传入的第三个参数$param,此参数也为可选参数
//
// 每三秒说个哈喽
$timer1 = \Swoole\Timer::tick(3000, function () {
    echo "Hello, 1 \n";
});
// 每三秒说个哈喽后,对面出现新人 每4秒回应个okk
\Swoole\Timer::tick(3000, function ($timer_id, $param1, $param2) {
    echo "Hello. $timer_id\n";

    \Swoole\Timer::tick(4000, function ($timer_id) {
        echo "okkkk. $timer_id\n";
    });
}, "param1", "param2");
// 2. 函数after():在指定的时间后执行函数。一次性定时器,执行完成后会自动销毁。
//    int Swoole\Timer::after(int $after_time_ms, callable $callback_function, ...$params);
\Swoole\Timer::after(3000, function() {
    echo "Hello. \n";
});
// 3. 函数clear():使用定时器 ID 来删除定时器。(只作用于当前进程)
//    bool Swoole\Timer::clear(int $timer_id);
//        $timer_id:定时器ID,调用Timer::tick、Timer::after后会返回一个整数的ID
var_dump(\Swoole\Timer::info($timer1));
// 4. 函数clearAll():清除当前 Worker 进程内的所有定时器。
//    bool Timer::clearAll();
var_dump(\Swoole\Timer::clearAll());
// 5. 函数info():返回 timer 的信息。
//    array Timer::info(int $id);
var_dump(\Swoole\Timer::info($timer1));
// 6. 函数list():返回定时器迭代器, 可使用foreach遍历全局所有timer的id
//    Timer\Iterator Timer::list();
foreach (\Swoole\Timer::list() as $timer_id) {
    var_dump(\Swoole\Timer::info($timer_id));
}
// 7. 函数stat():查看定时器状态。
//    array Timer::stats()
var_dump(\Swoole\Timer::stats());
// 8. 函数set():设置定时器相关参数。
//    function Timer::set(array $array);
// 默认定时器在执行回调函数时会自动创建协程,可单独设置定时器关闭协程。
\Swoole\Timer::set([
    'enable_coroutine' => false,
]);
// 三个人每三秒说一次Hello,10秒后闭嘴
$timer1 = \Swoole\Timer::tick(3000, function () {
    echo "Hello, 1 \n";
});
$timer2 = \Swoole\Timer::tick(3000, function () {
    echo "Hello, 2 \n";
});
$timer3 = \Swoole\Timer::tick(3000, function () {
    echo "Hello, 3 \n";
});

// 一次性定时器,执行完成后会自动销毁。
\Swoole\Timer::after(10000, function() use ($timer1,$timer2,$timer3) {
    var_dump(\Swoole\Timer::info($timer1));
    // var_dump(\Swoole\Timer::clear($timer1));
    // var_dump(\Swoole\Timer::clear($timer2));
    // var_dump(\Swoole\Timer::clear($timer3));
    var_dump(\Swoole\Timer::clearAll());
});

 类似资料: