eclipxe/php-soft-daemon

PHP 库,用于等待系统信号和运行代码

v2.0.1 2022-12-08 15:46 UTC

This package is auto-updated.

Last update: 2024-09-08 07:24:01 UTC


README

Source Code Packagist PHP Version Support Latest Version Software License Build Status Scrutinizer Coverage Status Total Downloads

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)
  • SIGTERMSIGINTSIGQUIT:终止迭代。方法:SoftDaemon::terminate()

SoftDaemon 如何知道将等待多少秒

暂停状态确定等待信号并继续下一次迭代的秒数。

如果 SoftDaemon 正在 暂停,则它将不会调用 runOnce,它将只尝试等待 1 秒。

如果 未暂停,则它将使用错误计数器并请求时序器来确定要等待的秒数。

Executable::runOnce(): bool 的结果确定错误数量。当 runOnce() 返回 true 时,它重置为零。当 runOnce() 返回 false 时,它增加 1。

无论如何,秒数将受 MinWaitMaxWait 属性的限制。

关于时序器

时序器是一个实现 SoftDaemon\Sequencer 的对象。它的目的是接收错误数量并返回要等待的秒数。在命名空间 SoftDaemon\Sequencer 中已经定义了一些预定义的时序器。

  • 固定:始终返回相同的秒数。
  • 线性:返回的秒数与错误计数相对应(0 -> 0, 1 -> 1, 2 -> 2, ...)。
  • 指数:返回的秒数与错误计数相对应的指数减 1,如果基数为 2,则它将返回以下数字:(0 -> 0, 1 -> 1, 2 -> 3, 3 -> 7, 4 -> 15, ...)

您可以根据自己的规则创建时序器。MinWaitMaxWait 限制了时序器返回的秒数的边界。

PHP 支持

此库至少兼容具有活跃支持的最早PHP支持的版本。请尝试充分利用PHP的功能。

我们遵循语义版本控制。在主要版本上,我们不会引入任何向后不兼容的更改。

内部类(使用@internal注解)不属于此协议,因为它们必须仅存在于本项目内部。请不要在您的项目中使用它们。

贡献

欢迎贡献!请阅读CONTRIBUTING以获取详细信息,并别忘了查看TODOCHANGELOG文件。

版权和许可证

eclipxe/php-soft-daemon库的版权©属于Carlos C Soto,并许可在MIT许可证(MIT)下使用。请参阅LICENSE以获取更多信息。