This commit is contained in:
2021-03-05 14:55:50 +08:00
parent b61c209195
commit b959bd037d
10 changed files with 29 additions and 35 deletions
+4 -7
View File
@@ -7,17 +7,14 @@ namespace HttpServer\Events;
use Annotation\Route\Socket; use Annotation\Route\Socket;
use HttpServer\Abstracts\Callback; use HttpServer\Abstracts\Callback;
use HttpServer\Http\Request; use HttpServer\Http\Request;
use HttpServer\Route\Node;
use Snowflake\Abstracts\Config;
use Snowflake\Event; use Snowflake\Event;
use Snowflake\Exception\ComponentException; use Snowflake\Exception\ComponentException;
use Snowflake\Exception\ConfigException; use Snowflake\Exception\ConfigException;
use Snowflake\Exception\NotFindClassException; use Snowflake\Exception\NotFindClassException;
use Snowflake\Snowflake; use Snowflake\Snowflake;
use Swoole\Coroutine;
use Swoole\Server; use Swoole\Server;
use Exception; use Exception;
use Swoole\WebSocket\Server as WServer; use Swoole\WebSocket\Server as WebsocketServer;
/** /**
* Class OnClose * Class OnClose
@@ -49,7 +46,7 @@ class OnClose extends Callback
private function execute(Server $server, int $fd): void private function execute(Server $server, int $fd): void
{ {
try { try {
if (!$server instanceof WServer) { if (!$server instanceof WebsocketServer) {
return; return;
} }
if (!$server->isEstablished($fd)) { if (!$server->isEstablished($fd)) {
@@ -59,8 +56,8 @@ class OnClose extends Callback
} catch (\Throwable $exception) { } catch (\Throwable $exception) {
$this->addError($exception); $this->addError($exception);
} finally { } finally {
$logger = Snowflake::app()->getLogger(); fire(Event::SYSTEM_RESOURCE_RELEASES);
$logger->insert(); logger()->insert();
} }
} }
+3
View File
@@ -29,6 +29,9 @@ class OnConnect extends Callback
{ {
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->trigger(Event::RECEIVE_CONNECTION, [$server, $fd, $reactorId]); $event->trigger(Event::RECEIVE_CONNECTION, [$server, $fd, $reactorId]);
fire(Event::SYSTEM_RESOURCE_RELEASES);
logger()->insert();
} }
+4
View File
@@ -88,6 +88,7 @@ class OnHandshake extends Callback
{ {
$this->execute($request, $response); $this->execute($request, $response);
fire(Event::SYSTEM_RESOURCE_RELEASES); fire(Event::SYSTEM_RESOURCE_RELEASES);
logger()->insert();
} }
@@ -119,6 +120,9 @@ class OnHandshake extends Callback
} catch (\Throwable $exception) { } catch (\Throwable $exception) {
$this->addError($exception); $this->addError($exception);
return $this->disconnect($response, 500); return $this->disconnect($response, 500);
} finally {
fire(Event::SYSTEM_RESOURCE_CLEAN);
logger()->insert();
} }
} }
+2 -2
View File
@@ -49,8 +49,8 @@ class OnPacket extends Callback
$response = DataResolve::pack($this->pack, $response); $response = DataResolve::pack($this->pack, $response);
return $server->sendto($clientInfo['address'], $clientInfo['port'], $response); return $server->sendto($clientInfo['address'], $clientInfo['port'], $response);
} finally { } finally {
$event = Snowflake::app()->getEvent(); fire(Event::SYSTEM_RESOURCE_RELEASES);
$event->trigger(Event::SERVER_WORKER_STOP); logger()->insert();
} }
} }
+2 -1
View File
@@ -53,7 +53,8 @@ class OnReceive extends Callback
return $server->send($fd, $response); return $server->send($fd, $response);
} finally { } finally {
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->trigger(Event::SERVER_WORKER_STOP); $event->trigger(Event::SYSTEM_RESOURCE_RELEASES);
logger()->insert();
} }
} }
+4 -3
View File
@@ -35,10 +35,11 @@ class OnRequest extends Callback
*/ */
public function onHandler(Request $request, Response $response): mixed public function onHandler(Request $request, Response $response): mixed
{ {
Coroutine::defer(function () use ($request) {
fire(Event::SYSTEM_RESOURCE_RELEASES);
logger()->insert();
});
try { try {
Coroutine::defer(function () use ($request) {
fire(Event::SYSTEM_RESOURCE_RELEASES);
});
[$request, $response] = static::create($request, $response); [$request, $response] = static::create($request, $response);
if (!$request->is('favicon.ico')) { if (!$request->is('favicon.ico')) {
return \router()->dispatch(); return \router()->dispatch();
+4
View File
@@ -101,6 +101,10 @@ class OnTask extends Callback
*/ */
private function runTaskHandler($data): ?array private function runTaskHandler($data): ?array
{ {
Coroutine\defer(function () {
fire(Event::SYSTEM_RESOURCE_RELEASES);
logger()->insert();
});
try { try {
$serialize = $this->before($data); $serialize = $this->before($data);
$params = $serialize->getParams(); $params = $serialize->getParams();
+2
View File
@@ -78,6 +78,8 @@ class Request extends HttpService
/** /**
* @return array|null * @return array|null
* @throws ComponentException * @throws ComponentException
* @throws NotFindClassException
* @throws ReflectionException
*/ */
public function getConnectInfo(): array|null public function getConnectInfo(): array|null
{ {
+2 -8
View File
@@ -285,18 +285,12 @@ abstract class Pool extends Component
return; return;
} }
$channel = $this->_items[$name]; $channel = $this->_items[$name];
while ($client = $channel->pop(0.001)) { $this->pop($channel, $name, 0);
unset($client);
$this->desc($name);
}
$this->_items[$name]->close();
$this->_items[$name] = null;
if ($this->creates > -1) { if ($this->creates > -1) {
Timer::clear($this->creates); Timer::clear($this->creates);
$this->debug('clean timer.'); $this->debug('clean timer.');
} }
$this->_items[$name] = null;
} }
+2 -14
View File
@@ -223,23 +223,11 @@ class Connection extends Pool
/** /**
* batch release * batch release
* @throws Exception
*/ */
public function connection_clear() public function connection_clear()
{ {
$connections = Context::getAllContext(); $this->flush(0);
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;
} }