This commit is contained in:
as2252258@163.com
2021-05-02 04:12:31 +08:00
parent cd4aad83de
commit 52f637ea25
3 changed files with 30 additions and 12 deletions
+8 -7
View File
@@ -179,7 +179,7 @@ class Loader extends BaseObject
} }
$this->appendFileToDirectory($path->getRealPath(), $replace->getName()); $this->appendFileToDirectory($path->getRealPath(), $replace->getName());
$_array = ['handler' => $replace->newInstance(), 'target' => [], 'methods' => [], 'property' => []]; $_array = ['handler' => $replace->getName(), 'target' => [], 'methods' => [], 'property' => []];
foreach ($replace->getAttributes() as $attribute) { foreach ($replace->getAttributes() as $attribute) {
if ($attribute->getName() == Attribute::class) { if ($attribute->getName() == Attribute::class) {
continue; continue;
@@ -401,21 +401,22 @@ class Loader extends BaseObject
if ($annotations === null) { if ($annotations === null) {
continue; continue;
} }
$target = new $annotations['handler']();
foreach ($annotations['target'] ?? [] as $value) { foreach ($annotations['target'] ?? [] as $value) {
$value->execute([$annotations['handler']]); $value->execute([$target]);
} }
$_className = $annotations['handler']::class;
foreach ($annotations['methods'] as $name => $attribute) { foreach ($annotations['methods'] as $name => $attribute) {
foreach ($attribute as $value) { foreach ($attribute as $value) {
if ($value instanceof Relation) { if ($value instanceof Relation) {
$annotation->addRelate($_className, $value->name, $name); $annotation->addRelate($target::class, $value->name, $name);
} else if ($value instanceof Get) { } else if ($value instanceof Get) {
$annotation->addGets($_className, $value->name, $name); $annotation->addGets($target::class, $value->name, $name);
} else if ($value instanceof Set) { } else if ($value instanceof Set) {
$annotation->addSets($_className, $value->name, $name); $annotation->addSets($target::class, $value->name, $name);
} else { } else {
$value->execute([$annotations['handler'], $name]); $value->execute([$target, $name]);
} }
} }
} }
+17 -4
View File
@@ -9,6 +9,7 @@ use HttpServer\Abstracts\Callback;
use Snowflake\Event; use Snowflake\Event;
use Snowflake\Exception\ConfigException; use Snowflake\Exception\ConfigException;
use Snowflake\Snowflake; use Snowflake\Snowflake;
use Swoole\Coroutine;
use Swoole\Coroutine\System; use Swoole\Coroutine\System;
use Swoole\Server; use Swoole\Server;
@@ -32,10 +33,7 @@ class OnWorkerStart extends Callback
putenv('state=start'); putenv('state=start');
putenv('worker=' . $worker_id); putenv('worker=' . $worker_id);
$content = System::readFile(storage('runtime.php')); $annotation = $this->settings();
$annotation = Snowflake::app()->getAnnotation();
$annotation->setLoader(unserialize($content));
if ($worker_id < $server->setting['worker_num']) { if ($worker_id < $server->setting['worker_num']) {
$this->onWorker($server, $annotation); $this->onWorker($server, $annotation);
} else { } else {
@@ -44,6 +42,21 @@ class OnWorkerStart extends Callback
} }
/**
* @return \Annotation\Annotation
* @throws \Exception
*/
private function settings(): Annotation
{
$content = System::readFile(storage('runtime.php'));
$annotation = Snowflake::app()->getAnnotation();
$annotation->setLoader(unserialize($content));
return $annotation;
}
/** /**
* @param Server $server * @param Server $server
* @param int $worker_id * @param int $worker_id
+5 -1
View File
@@ -115,7 +115,11 @@ class Server extends HttpService
Runtime::enableCoroutine(true, SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_BLOCKING_FUNCTION); Runtime::enableCoroutine(true, SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_BLOCKING_FUNCTION);
Coroutine::set(['enable_deadlock_check' => false]); $settings['enable_deadlock_check'] = false;
$settings['exit_condition'] = function () {
return Coroutine::stats()['coroutine_num'] === 0;
};
Coroutine::set($settings);
return $this->execute($baseServer); return $this->execute($baseServer);
} }