zwirek/react-timer-handler

ReactPHP计时器的简单处理器

1.1.0 2024-01-06 22:45 UTC

This package is auto-updated.

Last update: 2024-09-07 00:42:45 UTC


README

当设置 react/event-loop 计时器时,方法将返回计时器的对象。当您想要取消此计时器时,保留计时器的引用很重要。但由于进程异步生命周期特性的原因,引用可能会被新的计时器覆盖。ReactPHP Timer Handler 采用了不同的方法来处理计时器。每个计时器都有一个唯一的名称。

使用示例

添加计时器

$loop = \React\EventLoop\Factory::create();
$handler = new \Zwirek\React\Timer\Handler\TimerHandler($loop);

$success = $handler->addTimer('example_timer', 1, function (React\EventLoop\Timer\Timer $timer) {
    echo 'example_timer', PHP_EOL;
});

var_dump($success); //prints true

$loop->run();

echo 'done', PHP_EOL;

您不能意外地覆盖计时器。当运行时,您将只看到第一个计时器的输出。

$loop = \React\EventLoop\Factory::create();
$handler = new \Zwirek\React\Timer\Handler\TimerHandler($loop);

$first = $handler->addTimer('example_timer', 1, function (React\EventLoop\Timer\Timer $timer) {
    echo 'first', PHP_EOL;
});

$second = $handler->addTimer('example_timer', 1, function (React\EventLoop\Timer\Timer $timer) {
    echo 'second', PHP_EOL;
});

var_dump($first); //prints true
var_dump($second); //prints false

$loop->run();

echo 'done', PHP_EOL;

可以通过名称取消计时器

$loop = \React\EventLoop\Factory::create();
$handler = new \Zwirek\React\Timer\Handler\TimerHandler($loop);

$timer = $handler->addTimer('example_timer', 1, function (React\EventLoop\Timer\Timer $timer) {
    echo 'example_timer', PHP_EOL;
});

$handler->cancelTimer('example_timer');

$loop->run();

echo 'done', PHP_EOL;

react/event-loop 允许注册周期性计时器。TimerHandler 也允许通过名称注册周期性计时器

$loop = \React\EventLoop\Factory::create();

$handler = new \Zwirek\React\Timer\Handler\TimerHandler($loop);

$timer = $handler->addPeriodicTimer('periodic_timer', 1, function (React\EventLoop\Timer\Timer $timer) {});

$loop->run();

可以创建一个将在有限次数内执行的周期性计时器

$loop = \React\EventLoop\Factory::create();

$handler = new \Zwirek\React\Timer\Handler\TimerHandler($loop);

$timer = $handler->addLimitedPeriodicTimer('limited_periodic_timer', 1, function (React\EventLoop\Timer\Timer $timer) {}, 5);

$loop->run();

上面的计时器将在每1秒的间隔内执行注册的处理程序5次

要取消所有已注册的计时器,只需简单运行

$handler->cancelAll();