neutron / tip-top
Tip-Top,一个用于设置超时和周期性定时器的库
Requires
- php: >=5.3.3
- ext-pcntl: *
- ext-posix: *
- evenement/evenement: ~1.0
Requires (Dev)
- phpunit/phpunit: ~3.7
- sami/sami: ~1.0
This package is auto-updated.
Last update: 2024-08-25 06:40:53 UTC
README
#TIP-TOP
一个用于设置超时和周期性定时器的微型库。
$clock = new Clock(); // triggers a callback every second $timer = $clock->addPeriodicTimer(1, function ($timer) { echo "BOOM ! I'm triggered every second !\n"; });
它使用了Evenement。大部分定时器代码是从ReactPHP的定时器实现中提取的。
安装
推荐使用 composer 来使用 tip-top。
{ "require": { "neutron/tip-top": "0.2.*" } }
免责声明
限制
- Tip-Top 需要你在运行的脚本中声明滴答。
declare(ticks=1);
- Tip-Top 可能无法按预期与阻塞调用一起工作(请在尝试之前先试试)
这是阻塞还是非阻塞IO?
TipTop 是非阻塞的,但它已被设计为支持一些阻塞调用。如果你使用如 sleep(5)
这样的阻塞调用,定时器和超时可能会稍后触发。
对于 sleep
的一个常见解决方案是迭代1秒的睡眠: for ($i=0; $i!=5; $i++;) {sleep(1);}
。
时钟有原子精度吗?
不幸的是,这个库是基于对pcntl_alarm 函数的hack。因此,时钟的分辨率是秒,并且每秒大约有0.001秒的位移。
这样的时钟有什么用例?
想想那些需要定期检查的长运行进程。
文档
示例
在 Neutron\TipTop\Clock
对象上主要有两种方法: addPeriodicTimer
和 addTimer
。
use Neutron\TipTop\Clock; // mandatory for the clock to work declare(ticks=1); $clock = new Clock(); // triggers a callback every second $timer = $clock->addPeriodicTimer(1, function ($timer) { echo "BOOM ! I'm triggered every second !\n"; }); // triggers a callback in 5 second $timer = $clock->addTimer(5, function ($timer) { echo "BOOM ! I was planned 5 seconds ago !\n"; }); // removes all timers $clock->clear();
移除定时器
你可以使用其 cancel
方法来移除定时器
use Neutron\TipTop\Clock; // mandatory for the clock to work declare(ticks=1); $clock = new Clock(); $timer = $clock->addPeriodicTimer(1, function ($timer) { if ($stop) { $timer->cancel(); } });
清除所有定时器
你可能想要清除所有定时器
use Neutron\TipTop\Clock; // mandatory for the clock to work declare(ticks=1); $clock = new Clock(); $timer = $clock->addPeriodicTimer(1, function ($timer) { echo "Hello"; }); $timer = $clock->addPeriodicTimer(1, function ($timer) { echo "Hello World"; }); // removes all timers $clock->clear();
阻塞
有时你可能想要阻塞直到所有定时器都完成,使用 block
方法来做到这一点。
use Neutron\TipTop\Clock; // mandatory for the clock to work declare(ticks=1); $clock = new Clock(); // echoes three times $clock->addPeriodicTimer(1, function (signature) { echo "The block method blocks \n"; }, 3); $clock->block(); echo "This line will be blocked until last timer executes
测试
Tip Top 是功能性且可以用 PHPUnit 单元测试的。为了在您的系统上运行测试,请确保使用 composer install --dev
安装开发依赖项,然后运行 bin/phpunit -c phpunit.xml.dist
以运行单元测试,或者运行 bin/phpunit -c phpunit-functional.xml.dist
以运行功能测试。
##许可
本项目采用 MIT 许可证。