使用Swoole实现毫秒级定时器

使用tick方式实现毫秒级定时器

<?php
set_time_limit(0); // 不限制脚本最大执行时间
date_default_timezone_set('PRC');

$name = '张三';
$age = 18;

// 每1000毫秒执行一次,其中{$timer_id}为定时器ID
Swoole\Timer::tick(1000, function ($timer_id) use ($name, &$age) {
    $datetime = date('Y-m-d H:i:s');
    echo "[{$datetime} 触发定时器(\$timer_id={$timer_id})] 俺叫{$name},俺今年{$age}岁。" . PHP_EOL;
    $age++;
    if ($age > 25) {
        $result = Swoole\Timer::clear($timer_id);
        if ($result) {
            echo "清除定时器(\$timer_id={$timer_id})成功" . PHP_EOL;
        } else {
            echo "清除定时器(\$timer_id={$timer_id})失败" . PHP_EOL;
        }
    }
});

使用after方式实现毫秒级定时器

<?php
set_time_limit(0); // 不限制脚本最大执行时间
date_default_timezone_set('PRC');

function task($name, $age)
{
    Swoole\Timer::after(1000, function () use ($name, &$age) {
        $datetime = date('Y-m-d H:i:s');
        echo "[{$datetime}] 俺叫{$name},俺今年{$age}岁。" . PHP_EOL;
        $age++;
        if ($age <= 25) task($name, $age);
    });
}

task('张三', 18);

Copyright © 2023 码农人生. All Rights Reserved