This commit is contained in:
2021-07-30 17:52:09 +08:00
parent 677f771b3b
commit b13ab488cc
3 changed files with 64 additions and 43 deletions
+56 -43
View File
@@ -4,70 +4,83 @@
namespace Server; namespace Server;
use JetBrains\PhpStorm\Pure;
use Swoole\Coroutine\Channel; use Swoole\Coroutine\Channel;
class ApplicationStore class ApplicationStore
{ {
private static ?ApplicationStore $applicationStore = null; private static ?ApplicationStore $applicationStore = null;
private Channel $lock; private Channel $lock;
private function __construct() private function __construct()
{ {
$this->lock = new Channel(99999); $this->lock = new Channel(99999);
} }
/** /**
* @return \Server\ApplicationStore|null * @return ApplicationStore|null
*/ */
public static function getStore() public static function getStore(): ?ApplicationStore
{ {
if (!(static::$applicationStore instanceof ApplicationStore)) { if (!(static::$applicationStore instanceof ApplicationStore)) {
static::$applicationStore = new ApplicationStore(); static::$applicationStore = new ApplicationStore();
} }
return static::$applicationStore; return static::$applicationStore;
} }
public function add() /**
{ * @return $this
$this->lock->push(1); */
return $this; public function add(): static
} {
$this->lock->push(1);
return $this;
}
public function waite() /**
{ *
$this->lock->pop(-1); */
} public function waite(): void
{
if ($this->lock->isEmpty()) {
return;
}
$this->lock->pop(-1);
}
public function done() /**
{ *
$this->lock->pop(); */
} public function done(): void
{
$this->lock->pop();
}
/** /**
* @return bool * @return bool
*/ */
public function isBusy() public function isBusy(): bool
{ {
return !$this->lock->isEmpty(); return !$this->lock->isEmpty();
} }
/** /**
* @return string * @return string
*/ */
public function getStatus(): string #[Pure] public function getStatus(): string
{ {
return env('state'); return env('state');
} }
} }
+2
View File
@@ -92,6 +92,8 @@ class HTTPServerListener extends Abstracts\Server
{ {
try { try {
// defer(fn() => fire(Event::SYSTEM_RESOURCE_RELEASES)); // defer(fn() => fire(Event::SYSTEM_RESOURCE_RELEASES));
ApplicationStore::getStore()->waite();
/** @var \HttpServer\Http\Response $sResponse */ /** @var \HttpServer\Http\Response $sResponse */
[$sRequest, $sResponse] = $this->request($request, $response); [$sRequest, $sResponse] = $this->request($request, $response);
+6
View File
@@ -5,6 +5,7 @@ namespace Server\Worker;
use Annotation\Annotation; use Annotation\Annotation;
use Exception; use Exception;
use ReflectionException; use ReflectionException;
use Server\ApplicationStore;
use Server\Constant; use Server\Constant;
use Snowflake\Abstracts\Config; use Snowflake\Abstracts\Config;
use Snowflake\Core\Help; use Snowflake\Core\Help;
@@ -33,6 +34,9 @@ class ServerWorker extends \Server\Abstracts\Server
public function onWorkerStart(Server $server, int $workerId) public function onWorkerStart(Server $server, int $workerId)
{ {
$this->_setConfigCache($workerId); $this->_setConfigCache($workerId);
$store = ApplicationStore::getStore()->add();
$annotation = Snowflake::app()->getAnnotation(); $annotation = Snowflake::app()->getAnnotation();
$annotation->read(APP_PATH . 'app'); $annotation->read(APP_PATH . 'app');
@@ -40,6 +44,8 @@ class ServerWorker extends \Server\Abstracts\Server
$this->workerInitExecutor($server, $annotation, $workerId); $this->workerInitExecutor($server, $annotation, $workerId);
$this->interpretDirectory($annotation); $this->interpretDirectory($annotation);
$store->done();
} }