fortrabbit / beelzebub
此包已被废弃,不再维护。未建议替代包。
用于编写(分支)多进程守护进程的PHP框架
dev-master
2014-09-09 12:39 UTC
Requires
- php: >=5.4.0
- ext-pcntl: *
- ext-posix: *
- frbit/system-builtin: *@dev
- frbit/system-unix-process: *@dev
- kriswallsmith/spork: *@dev
- monolog/monolog: >=1.10
- psr/log: >=1.0
- symfony/event-dispatcher: >=2.4
- symfony/filesystem: >=2.4
Requires (Dev)
- mockery/mockery: @dev
- phpunit/phpunit: >=4.1
Suggests
- ext-proctitle: If installed, php processes can be named using setproctitle()
Replaces
This package is not auto-updated.
Last update: 2020-01-24 15:17:21 UTC
README
Beelzebub是一个用于编写(分支)多进程守护进程的PHP框架。它提供了一个高度可配置的进程管理器,可扩展的日志记录和一个简单的编程接口。
如果您正在寻找一个单进程守护进程框架,请查看clio。
示例
<?php
require_once 'vendor/autoload.php';
use Fortrabbit\Beelzebub\DaemonInterface;
use Fortrabbit\Beelzebub\Daemon;
use Fortrabbit\Beelzebub\WorkerInterface;
$daemon = new Daemon("simple", "1.0.0");
$daemon->registerWorker(array(
'do-something' => array(
'run' => function (WorkerInterface &$w, DaemonInterface &$d) {
$d->getLogger()->info("Doing something");
},
'interval' => 30
),
'do-something-else' => array(
'startup' => function(WorkerInterface &$worker, DaemonInterface &$d) {
$d->getLogger()->info("Staring up something else");
},
'run' => function (WorkerInterface &$w, DaemonInterface &$d) {
$d->getLogger()->info("Doing something else");
},
'interval' => 5,
)
));
$daemon->run();
安装
$ php composer.phar require "fortrabbit/beelzebub:@dev"
用法
创建
<?php
// create a new daemon instance with name and version
$daemon = new Daemon("simple", "1.0.0");
注册工作进程
<?php
// register worker by name
$daemon->registerWorker(array(
// unique name of the worker
'worker-name' => array(
// opt: startup method, called before first run
'startup' => function (WorkerInterface &$w, DaemonInterface &$d) {
// ..
},
// req: the run method, called every [interval]
'run' => function (WorkerInterface &$w, DaemonInterface &$d) {
// ..
},
// req: the interval between calling the run in seconds
'interval' => 30,
// opt: amount of instances (default: 1)
'amount' => 2
),
// .. other workers
);
// de-register a named worker
$daemon->unregisterWorker('worker-name');
关闭行为
<?php
// set shutdown method in seconds. Defaults to 30
$daemon->setShutdownTimeout($secs);
// set alternate shutdown signal which is sent to workers. Default: SIGQUIT
$daemon->setShutdownSignal(SIGINT);
// set callback for when every child has been killed
$daemon->setShutdownHandler(function (DaemonInterface &$d) { /*..*/ });
重启行为
<?php
// enable restart (stop/start) of all workers on signal. Use false to
// deactivate again (default)
$daemon->setRestartSignal(SIGUSR1);
// set handler which is called when stop of all workers is performed, right
// before start is executed. Only used if restart signal has been set.
$daemon->setRestartHandler(function (DaemonInterface &$d) { /* .. */ });
日志记录
默认情况下,所有内容都记录到STDOUT。
<?php
// set an logfile for output.
$daemon->setLogfile($filePath);
// set a \Monolog\Logger for handling logging (above logfile is ignored, if
// this is used)
$daemon->setLogger($logger);
// access to logger
$daemon->getLogger()->info("Hello");
运行
<?php
// run daemon, do NOT detach from shell
$daemon->run();
// run daemon and DO detach from shell. Write pid into $pidFile
$daemon->runDetached($pidFile);
杂项
<?php
// sleep entropy introduces randomness. A value of 0 indicates no randomness,
// a value of 100 the maximum.
// Example: if the interval attrib of a worker is set to 30.
// entropy = 0: the process manager waits exactly 30 seconds between worker loops
// entropy = 50: the process manager waits 15 to 45 seconds between worker loops
// entropy = 100: the process manager waits 0 to 60 seconds between worker loops
// Default is 50
$daemon->setSleepEntropy(50);
注意事项
- 未在PHP 5.3上测试,但应该可以工作