eclipxe / php-soft-daemon
PHP 库,用于等待系统信号和运行代码
Requires
- php: >=7.3
- ext-pcntl: *
Requires (Dev)
- phpunit/phpunit: ^9.5
README
PHP SoftDaemon 库
SoftDaemon 提供了一个库来持续运行某些代码。
我创建这个库是为了连续执行程序和操作迭代之间的时间。我还用它向进程发送信号以操纵执行的行
不要重新发明轮子,如果 cron 作业适合您,则使用它们。
运行方式
您必须创建一个 SoftDaemon 实例,它至少需要一个实现 SoftDaemon\Executable 接口的 Executable 对象。
SoftDaemon\Executable 接口要求您创建两个方法
- 将调用
signalHandler(int $signo): void以可选地处理信号。 - 将在每个迭代上调用
runOnce(): bool。
例如,您可以使用 signalHandler($signo) 来处理 SIGHUP。
一旦实例化了 SoftDaemon 对象,您就可以调用 run() 方法。此方法将进入循环并在每个迭代上运行 Executable::runOnce()。在每个迭代结束时,循环将等待。
使用的信号
这些信号由 SoftDaemon 捕获。所有信号都在 SoftDaemon 进行自己的处理之前传递到 Executable::signalHandler($signo)。
- SIGHUP:将错误计数器重置为零。方法:
SoftDaemon::resetErrorCounter() - SIGUSR1:暂停迭代。方法:
SoftDaemon::setPause(true) - SIGUSR2:取消暂停迭代。方法:
SoftDaemon::setPause(false) - SIGTERM,SIGINT,SIGQUIT:终止迭代。方法:
SoftDaemon::terminate()
SoftDaemon 如何知道将等待多少秒
暂停状态确定等待信号并继续下一次迭代的秒数。
如果 SoftDaemon 正在 暂停,则它将不会调用 runOnce,它将只尝试等待 1 秒。
如果 未暂停,则它将使用错误计数器并请求时序器来确定要等待的秒数。
Executable::runOnce(): bool 的结果确定错误数量。当 runOnce() 返回 true 时,它重置为零。当 runOnce() 返回 false 时,它增加 1。
无论如何,秒数将受 MinWait 和 MaxWait 属性的限制。
关于时序器
时序器是一个实现 SoftDaemon\Sequencer 的对象。它的目的是接收错误数量并返回要等待的秒数。在命名空间 SoftDaemon\Sequencer 中已经定义了一些预定义的时序器。
- 固定:始终返回相同的秒数。
- 线性:返回的秒数与错误计数相对应(0 -> 0, 1 -> 1, 2 -> 2, ...)。
- 指数:返回的秒数与错误计数相对应的指数减 1,如果基数为 2,则它将返回以下数字:
(0 -> 0, 1 -> 1, 2 -> 3, 3 -> 7, 4 -> 15, ...)。
您可以根据自己的规则创建时序器。MinWait 和 MaxWait 限制了时序器返回的秒数的边界。
PHP 支持
此库至少兼容具有活跃支持的最早PHP支持的版本。请尝试充分利用PHP的功能。
我们遵循语义版本控制。在主要版本上,我们不会引入任何向后不兼容的更改。
内部类(使用@internal注解)不属于此协议,因为它们必须仅存在于本项目内部。请不要在您的项目中使用它们。
贡献
欢迎贡献!请阅读CONTRIBUTING以获取详细信息,并别忘了查看TODO和CHANGELOG文件。
版权和许可证
eclipxe/php-soft-daemon库的版权©属于Carlos C Soto,并许可在MIT许可证(MIT)下使用。请参阅LICENSE以获取更多信息。