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以获取更多信息。