workerman单独运行定时器

2022-02-02

workerman的方法都要在woker类的回调中执行,否则会报错;只能在onXXXX回调中添加定时器;可能会有1毫秒左右的误差;定时器不能跨进程删除;同一个进程内产生的定时器id不会重复

use \Workerman\Worker;
use \Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';

$task = new Worker();
$task->onWorkerStart = function($task)
{
    // 每2.5秒执行一次,$args为回调的参数,$persistent为true是定时器一直执行,为false定时器只执行一次
    // $id为定时器id,定时器中想使用$id需要使用&(引用传递)
    $time_interval = 2.5;
    $count         = 0;
    $id = Timer::add($time_interval, function($id, $count) {
        if ($count++ > 10) {
            Timer::del($id);
        }
        echo "task run\n";
    }, $args = [&$id, &$count], $persistent = true);
};

// 运行worker
Worker::runAll();

 

{/if}