ustream/daemon

Ustream daemon

1.0.0 2013-12-05 13:11 UTC

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文件中指定的条款进行重新分发。