zwirek / react-timer-handler
ReactPHP计时器的简单处理器
1.1.0
2024-01-06 22:45 UTC
Requires
- php: >=8.1
- react/event-loop: ^1.1
Requires (Dev)
- phpunit/phpunit: ^8.2
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();