fortrabbit/beelzebub

此包已被废弃,不再维护。未建议替代包。

用于编写(分支)多进程守护进程的PHP框架

dev-master 2014-09-09 12:39 UTC

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上测试,但应该可以工作