ustream / daemon
Ustream daemon
Requires
- php: >=5.3
- ext-pcntl: *
- ext-posix: *
- psr/log: 1.0.0
- symfony/event-dispatcher: >2.1.0,<2.4
Requires (Dev)
- phploc/phploc: ~2.0.0
- phpmd/phpmd: ~1.5.0
- phpunit/phpunit: ~3.7.0
- sebastian/phpcpd: ~1.4.3
- squizlabs/php_codesniffer: ~1.4
This package is not auto-updated.
Last update: 2024-09-14 14:50:17 UTC
README
Ustream_Daemon
是一个库,用于将 php 代码作为守护进程运行。它解决了 php 在该领域的限制,并实现了一些合理的默认行为。主要目标是提供一种稳健的方式连续运行 php 代码,同时将业务逻辑与后台任务的具体细节解耦。我们像其他人一样讨厌多余的模板代码,因此守护进程有一个共同的入口点。
下载
Github: http://github.com/ustream/daemon/tree/master
Composer
composer require ustream/daemon:~0.1.0
版本控制
我们遵循 http://semver.org 上的指南
特性
- 上下文
- 通过 symfony 事件调度器扩展
用法
我们建议在每个项目中使用库的单个入口点。创建这个入口点取决于你,它应该以你所需的方式启动你的应用程序,然后调用守护进程运行器类
require 'bootstrap.php';
$runner = new Ustream_Daemon_Runner();
$runner->runDaemon(
__DIR__ . '/run', // run directory, pids are stored here
'production', // context it is used to suffix log filenames and pidfiles
__DIR__ . '/ini', // ini directory, the configuration files are stored here
array() // event listeners
);
你可以通过使用 --id="daemon-name" 参数调用此入口点来启动守护进程。从提供的 ini 目录中使用配置文件 daemon-name.ini 配置守护进程。
守护进程配置
最重要的是指定一个工厂方法,它返回一个实现 Ustream_Daemon_Task
接口的对象。该接口本身只有一个方法,doTask()
- 你应该在这个方法中指定守护进程应该定期执行的操作。这是 ini 文件中唯一必需的元素,其他都是可选的。
- factory: 一个字符串,指定一个类和静态工厂方法以获取任务
- sleep: 一个整数,指定
doTask()
运行的周期长度。守护进程等待这么多秒(减去doTask()
方法的实际执行长度,因此通常不会积累延迟) - min-sleep: 另一个以秒为单位的整数值,指定两次运行之间的最小间隔。如果任务本身需要一些休息(例如,例如系统负载),即使距离下一次运行还有足够的时间,这也很有用。
- memory-limit: 以 php 的字节简写表示法指定(见 手册)。这将通过
ini_set
设置为memory_limit
- memory-threshold: 0 到 100 之间的一个值。它指定允许守护进程使用的上述内存限制的部分,以百分比表示。运行器在每次运行后检查内存使用情况,如果超出则退出进程。
- log-dir: 守护进程应该放置其日志文件的目录路径。
- common-log: 守护进程处理程序自己写入一些日志的公共日志文件的路径(例如,当它启动或停止子进程时)。它的典型用例是拥有一个文件,该文件被所有守护进程使用,并记录它们的启动和停止。
示例配置 ini 文件
factory=Ustream\EditorialMetrics\LogProcessor::create
sleep=0
min-sleep=0
memory-limit=256M
memory-threshold=70
log-dir=/var/log/custom_php/
common-log=/var/log/custom_php/daemon_util.log
事件
守护进程派发了两个事件。一个在启动时,一个在每个任务的完成时。事件标识符常量定义在 Ustream_Daemon_Event
类中。您可以通过 addListeners()
方法向这些事件添加监听器。示例
$daemon->addListeners(array(
Ustream_Daemon_Event::START => array(
array($onStartListener, 'onStart'),
),
Ustream_Daemon_Event::TASK_DONE => array(
array($onTaskDoneListener, 'onTaskDone'),
)
);
事件通过symfony的事件调度器进行分发,这意味着监听器对象的指定方法将以事件对象作为参数被调用。更多关于此的信息,请参考symfony手册
贡献
请参阅CONTRIBUTING.md获取详细信息。
致谢
Ustream_Daemon由ustream.tv, inc维护
作者
许可证
Ustream_Daemon版权所有 © 2013 Ustream Inc。这是免费软件,可以根据LICENSE文件中指定的条款进行重新分发。