moonspot / supervisor
管理分叉进程
dev-master
2018-02-22 01:01 UTC
Requires
- php: >=5.4.0
This package is auto-updated.
Last update: 2024-09-11 02:49:20 UTC
README
Supervisor 类将通过回调管理子进程,该回调在子进程分叉后被调用。它将重启新子进程以替换退出的子进程。
为什么?
Supervisor 对于任何需要运行长时间运行的 PHP 进程的应用程序都很有用。
现代应用程序开发有时需要运行长时间运行的 PHP 进程。因为 Supervisor 是 PHP,它允许您在不进行任何修改的情况下分叉和管理运行现有 PHP 代码的进程。
这种情况之一是管理 Gearman 工作进程。实际上,这个项目受到了 GearmanManager 管理工作进程的方式的启发。计划是在 GearmanManager 的未来版本中将它作为处理进程管理的代码。
示例
<?php // Some Worker Class class SomeWorker { public $keepWorking = true; public function doWork() { while($this->keepWorking) { // do stuff usleep(500000); } } }
<?php require __DIR__."/../../src/Supervisor.php"; require __DIR__."/SomeWorker.php"; use \Moonspot\Supervisor\Supervisor; class MyApplication { protected $super; protected $worker; public function __construct() { $this->super = new Supervisor( array($this, "monitor"), array($this, "log"), array($this, "handleSignal") ); } public function startWorkers($count) { for($x=0; $x<$count; $x++){ $this->super->addChild( array($this, "startWorker"), array(), 3600000 ); } $this->super->wait(); } public function startWorker() { $this->worker = new SomeWorker(); $this->worker->doWork(); } public function handleSignal($signal) { $this->worker->keepWorking = false; } public function monitor() { // we could call $this->super->stop() or $this->super->restart() here } public function log($log) { list($sec, $ms) = explode(".", number_format(microtime(true), 3)); echo "[".date("Y-m-d H:i:s").".$ms] $log\n"; } }
<?php require __DIR__."/MyApplication.php"; $app = new MyApplication(); $app->startWorkers(10);