diff --git a/HttpServer/Events/OnClose.php b/HttpServer/Events/OnClose.php index 4da045ae..5204e75d 100644 --- a/HttpServer/Events/OnClose.php +++ b/HttpServer/Events/OnClose.php @@ -7,17 +7,14 @@ namespace HttpServer\Events; use Annotation\Route\Socket; use HttpServer\Abstracts\Callback; use HttpServer\Http\Request; -use HttpServer\Route\Node; -use Snowflake\Abstracts\Config; use Snowflake\Event; use Snowflake\Exception\ComponentException; use Snowflake\Exception\ConfigException; use Snowflake\Exception\NotFindClassException; use Snowflake\Snowflake; -use Swoole\Coroutine; use Swoole\Server; use Exception; -use Swoole\WebSocket\Server as WServer; +use Swoole\WebSocket\Server as WebsocketServer; /** * Class OnClose @@ -49,7 +46,7 @@ class OnClose extends Callback private function execute(Server $server, int $fd): void { try { - if (!$server instanceof WServer) { + if (!$server instanceof WebsocketServer) { return; } if (!$server->isEstablished($fd)) { @@ -59,8 +56,8 @@ class OnClose extends Callback } catch (\Throwable $exception) { $this->addError($exception); } finally { - $logger = Snowflake::app()->getLogger(); - $logger->insert(); + fire(Event::SYSTEM_RESOURCE_RELEASES); + logger()->insert(); } } diff --git a/HttpServer/Events/OnConnect.php b/HttpServer/Events/OnConnect.php index f9927628..2bf992c3 100644 --- a/HttpServer/Events/OnConnect.php +++ b/HttpServer/Events/OnConnect.php @@ -29,6 +29,9 @@ class OnConnect extends Callback { $event = Snowflake::app()->getEvent(); $event->trigger(Event::RECEIVE_CONNECTION, [$server, $fd, $reactorId]); + + fire(Event::SYSTEM_RESOURCE_RELEASES); + logger()->insert(); } diff --git a/HttpServer/Events/OnHandshake.php b/HttpServer/Events/OnHandshake.php index 861259eb..2116e706 100644 --- a/HttpServer/Events/OnHandshake.php +++ b/HttpServer/Events/OnHandshake.php @@ -88,6 +88,7 @@ class OnHandshake extends Callback { $this->execute($request, $response); fire(Event::SYSTEM_RESOURCE_RELEASES); + logger()->insert(); } @@ -119,6 +120,9 @@ class OnHandshake extends Callback } catch (\Throwable $exception) { $this->addError($exception); return $this->disconnect($response, 500); + } finally { + fire(Event::SYSTEM_RESOURCE_CLEAN); + logger()->insert(); } } diff --git a/HttpServer/Events/OnPacket.php b/HttpServer/Events/OnPacket.php index b1cb00e5..dc46b39e 100644 --- a/HttpServer/Events/OnPacket.php +++ b/HttpServer/Events/OnPacket.php @@ -49,8 +49,8 @@ class OnPacket extends Callback $response = DataResolve::pack($this->pack, $response); return $server->sendto($clientInfo['address'], $clientInfo['port'], $response); } finally { - $event = Snowflake::app()->getEvent(); - $event->trigger(Event::SERVER_WORKER_STOP); + fire(Event::SYSTEM_RESOURCE_RELEASES); + logger()->insert(); } } diff --git a/HttpServer/Events/OnReceive.php b/HttpServer/Events/OnReceive.php index c198d805..ed72d5ca 100644 --- a/HttpServer/Events/OnReceive.php +++ b/HttpServer/Events/OnReceive.php @@ -53,7 +53,8 @@ class OnReceive extends Callback return $server->send($fd, $response); } finally { $event = Snowflake::app()->getEvent(); - $event->trigger(Event::SERVER_WORKER_STOP); + $event->trigger(Event::SYSTEM_RESOURCE_RELEASES); + logger()->insert(); } } diff --git a/HttpServer/Events/OnRequest.php b/HttpServer/Events/OnRequest.php index 5ffd96b0..73d6fc37 100644 --- a/HttpServer/Events/OnRequest.php +++ b/HttpServer/Events/OnRequest.php @@ -35,10 +35,11 @@ class OnRequest extends Callback */ public function onHandler(Request $request, Response $response): mixed { + Coroutine::defer(function () use ($request) { + fire(Event::SYSTEM_RESOURCE_RELEASES); + logger()->insert(); + }); try { - Coroutine::defer(function () use ($request) { - fire(Event::SYSTEM_RESOURCE_RELEASES); - }); [$request, $response] = static::create($request, $response); if (!$request->is('favicon.ico')) { return \router()->dispatch(); diff --git a/HttpServer/Events/OnTask.php b/HttpServer/Events/OnTask.php index d0f44060..5b7784bb 100644 --- a/HttpServer/Events/OnTask.php +++ b/HttpServer/Events/OnTask.php @@ -101,6 +101,10 @@ class OnTask extends Callback */ private function runTaskHandler($data): ?array { + Coroutine\defer(function () { + fire(Event::SYSTEM_RESOURCE_RELEASES); + logger()->insert(); + }); try { $serialize = $this->before($data); $params = $serialize->getParams(); diff --git a/HttpServer/Http/Request.php b/HttpServer/Http/Request.php index 2547a43b..b50acfbc 100644 --- a/HttpServer/Http/Request.php +++ b/HttpServer/Http/Request.php @@ -78,6 +78,8 @@ class Request extends HttpService /** * @return array|null * @throws ComponentException + * @throws NotFindClassException + * @throws ReflectionException */ public function getConnectInfo(): array|null { diff --git a/System/Abstracts/Pool.php b/System/Abstracts/Pool.php index 25592e4c..555b8a65 100644 --- a/System/Abstracts/Pool.php +++ b/System/Abstracts/Pool.php @@ -285,18 +285,12 @@ abstract class Pool extends Component return; } $channel = $this->_items[$name]; - while ($client = $channel->pop(0.001)) { - unset($client); - $this->desc($name); - } - $this->_items[$name]->close(); - $this->_items[$name] = null; - + $this->pop($channel, $name, 0); if ($this->creates > -1) { Timer::clear($this->creates); $this->debug('clean timer.'); } - + $this->_items[$name] = null; } diff --git a/System/Pool/Connection.php b/System/Pool/Connection.php index fb8c48b9..23d3c466 100644 --- a/System/Pool/Connection.php +++ b/System/Pool/Connection.php @@ -223,23 +223,11 @@ class Connection extends Pool /** * batch release + * @throws Exception */ public function connection_clear() { - $connections = Context::getAllContext(); - foreach ($connections as $name => $connection) { - if (empty($connection) || !($connection instanceof PDO)) { - continue; - } - /** @var PDO $pdoClient */ - if ($connection->inTransaction()) { - $connection->commit(); - } - $this->push($name, $connection); - $this->remove($name); - } - $this->hasCreate = []; - $this->creates = 0; + $this->flush(0); }