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 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();
}
}
+3
View File
@@ -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();
}
+4
View File
@@ -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();
}
}
+2 -2
View File
@@ -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();
}
}
+2 -1
View File
@@ -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();
}
}
+4 -3
View File
@@ -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();
+4
View File
@@ -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();
+2
View File
@@ -78,6 +78,8 @@ class Request extends HttpService
/**
* @return array|null
* @throws ComponentException
* @throws NotFindClassException
* @throws ReflectionException
*/
public function getConnectInfo(): array|null
{
+2 -8
View File
@@ -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;
}
+2 -14
View File
@@ -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);
}