本文整理汇总了PHP中PHPDaemon\Core\Daemon::process方法的典型用法代码示例。如果您正苦于以下问题:PHP Daemon::process方法的具体用法?PHP Daemon::process怎么用?PHP Daemon::process使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PHPDaemon\Core\Daemon
的用法示例。
在下文中一共展示了Daemon::process方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: run
/**
* Runtime of Worker process.
* @return void
*/
protected function run()
{
if (Daemon::$process instanceof Master) {
Daemon::$process->unregisterSignals();
}
EventLoop::init();
Daemon::$process = $this;
if (Daemon::$logpointerAsync) {
Daemon::$logpointerAsync->fd = null;
Daemon::$logpointerAsync = null;
}
class_exists('Timer');
if (Daemon::$config->autogc->value > 0) {
gc_enable();
} else {
gc_disable();
}
$this->prepareSystemEnv();
$this->registerEventSignals();
FileSystem::init();
// re-init
FileSystem::initEvent();
Daemon::openLogs();
$this->fileWatcher = new FileWatcher();
$this->IPCManager = Daemon::$appResolver->getInstanceByAppName('\\PHPDaemon\\IPCManager\\IPCManager');
if (!$this->IPCManager) {
$this->log('cannot instantiate IPCManager');
}
EventLoop::$instance->run();
}
示例2: run
/**
* Runtime of Master process
* @return void
*/
protected function run()
{
Daemon::$process = $this;
$this->prepareSystemEnv();
class_exists('Timer');
// ensure loading this class
gc_enable();
/* This line must be commented according to current libevent binding implementation. May be uncommented in future. */
//$this->eventBase = new \EventBase;
if ($this->eventBase) {
$this->registerEventSignals();
} else {
$this->registerSignals();
}
$this->workers = new Collection();
$this->collections['workers'] = $this->workers;
$this->ipcthreads = new Collection();
$this->collections['ipcthreads'] = $this->ipcthreads;
Daemon::$appResolver->preload(true);
$this->callbacks = new StackCallbacks();
$this->spawnIPCThread();
$this->spawnWorkers(min(Daemon::$config->startworkers->value, Daemon::$config->maxworkers->value));
$this->timerCb = function ($event) use(&$cbs) {
static $c = 0;
++$c;
if ($c > 0xfffff) {
$c = 1;
}
if ($c % 10 == 0) {
gc_collect_cycles();
}
if (!$this->lastMpmActionTs || microtime(true) - $this->lastMpmActionTs > $this->minMpmActionInterval) {
$this->callMPM();
}
if ($event) {
$event->timeout();
}
};
if ($this->eventBase) {
// we are using libevent in Master
Timer::add($this->timerCb, 1000000.0 * Daemon::$config->mpmdelay->value, 'MPM');
while (!$this->breakMainLoop) {
$this->callbacks->executeAll($this);
if (!$this->eventBase->dispatch()) {
break;
}
}
} else {
// we are NOT using libevent in Master
$lastTimerCall = microtime(true);
while (!$this->breakMainLoop) {
$this->callbacks->executeAll($this);
if (microtime(true) > $lastTimerCall + Daemon::$config->mpmdelay->value) {
call_user_func($this->timerCb, null);
$lastTimerCall = microtime(true);
}
$this->sigwait();
}
}
}
示例3: run
/**
* Runtime of Worker process.
* @return void
*/
protected function run()
{
$this->lambdaCache = new CappedStorageHits();
$this->lambdaCache->setMaxCacheSize(Daemon::$config->lambdacachemaxsize->value);
$this->lambdaCache->setCapWindow(Daemon::$config->lambdacachecapwindow->value);
$this->callbacks = new StackCallbacks();
if (Daemon::$process instanceof Master) {
Daemon::$process->unregisterSignals();
}
if (Daemon::$process && Daemon::$process->eventBase) {
Daemon::$process->eventBase->reinit();
$this->eventBase = Daemon::$process->eventBase;
} else {
$this->eventBase = new \EventBase();
}
Daemon::$process = $this;
if (Daemon::$logpointerAsync) {
$oldfd = Daemon::$logpointerAsync->fd;
Daemon::$logpointerAsync->fd = null;
Daemon::$logpointerAsync = null;
}
class_exists('Timer');
$this->autoReloadLast = time();
$this->reloadDelay = Daemon::$config->mpmdelay->value + 2;
$this->setState(Daemon::WSTATE_PREINIT);
if (Daemon::$config->autogc->value > 0) {
gc_enable();
gc_collect_cycles();
} else {
gc_disable();
}
if (Daemon::$runworkerMode) {
if (!Daemon::$config->verbosetty->value) {
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
}
Daemon::$appResolver->preload(true);
}
$this->prepareSystemEnv();
$this->overrideNativeFuncs();
$this->setState(Daemon::WSTATE_INIT);
$this->dnsBase = new \EventDnsBase($this->eventBase, false);
// @TODO: test with true
$this->registerEventSignals();
FileSystem::init();
FileSystem::initEvent();
Daemon::openLogs();
$this->IPCManager = Daemon::$appResolver->getInstanceByAppName('\\PHPDaemon\\IPCManager\\IPCManager');
if (!$this->IPCManager) {
$this->log('cannot instantiate IPCManager');
}
Daemon::$appResolver->preload();
foreach (Daemon::$appInstances as $app) {
foreach ($app as $appInstance) {
if (!$appInstance->ready) {
$appInstance->ready = true;
$appInstance->onReady();
}
}
}
$this->setState(Daemon::WSTATE_IDLE);
Timer::add(function ($event) {
if (!Daemon::$runworkerMode) {
if ($this->IPCManager) {
$this->IPCManager->ensureConnection();
}
}
$this->breakMainLoopCheck();
if ($this->breakMainLoop) {
$this->eventBase->exit();
return;
}
if (Daemon::checkAutoGC()) {
$this->callbacks->push(function ($thread) {
gc_collect_cycles();
});
$this->eventBase->exit();
}
$event->timeout();
}, 1000000.0 * 1, 'breakMainLoopCheck');
if (Daemon::$config->autoreload->value > 0) {
Timer::add(function ($event) {
static $n = 0;
$list = get_included_files();
$s = sizeof($list);
if ($s > $n) {
$slice = array_map('realpath', array_slice($list, $n));
Daemon::$process->IPCManager->sendPacket(['op' => 'addIncludedFiles', 'files' => $slice]);
$n = $s;
}
$event->timeout();
}, 1000000.0 * Daemon::$config->autoreload->value, 'watchIncludedFiles');
}
while (!$this->breakMainLoop) {
$this->callbacks->executeAll($this);
//.........这里部分代码省略.........