This commit is contained in:
2021-02-20 15:21:42 +08:00
parent 60805d5f4c
commit 52bf002be5
14 changed files with 20 additions and 46 deletions
+2 -2
View File
@@ -70,8 +70,8 @@ class Connection extends Component
public function init() public function init()
{ {
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->on(Event::RELEASE_ALL, [$this, 'disconnect']); $event->on(Event::SYSTEM_RESOURCE_CLEAN, [$this, 'disconnect']);
$event->on(Event::EVENT_AFTER_REQUEST, [$this, 'clear_connection']); $event->on(Event::SYSTEM_RESOURCE_RELEASES, [$this, 'clear_connection']);
} }
+1 -1
View File
@@ -182,7 +182,7 @@ class Pagination extends Component
$this->addError($exception->getMessage()); $this->addError($exception->getMessage());
} finally { } finally {
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->trigger(Event::EVENT_AFTER_REQUEST); $event->trigger(Event::SYSTEM_RESOURCE_RELEASES);
$this->_group->done(); $this->_group->done();
} }
}, $callback, $data, $param); }, $callback, $data, $param);
+1
View File
@@ -41,6 +41,7 @@ abstract class Callback extends Application
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->offName(Event::EVENT_AFTER_REQUEST); $event->offName(Event::EVENT_AFTER_REQUEST);
$event->offName(Event::SYSTEM_RESOURCE_RELEASES);
$event->offName(Event::EVENT_BEFORE_REQUEST); $event->offName(Event::EVENT_BEFORE_REQUEST);
$this->eventNotify($message, $event); $this->eventNotify($message, $event);
} catch (\Throwable $exception) { } catch (\Throwable $exception) {
-13
View File
@@ -4,25 +4,12 @@ declare(strict_types=1);
namespace HttpServer; namespace HttpServer;
use Database\DatabasesProviders;
use HttpServer\Client\Client;
use HttpServer\Client\Curl;
use HttpServer\Client\Http2;
use HttpServer\Http\HttpHeaders; use HttpServer\Http\HttpHeaders;
use HttpServer\Http\HttpParams; use HttpServer\Http\HttpParams;
use HttpServer\Http\Request; use HttpServer\Http\Request;
use Exception; use Exception;
use HttpServer\Route\Router;
use Kafka\Producer;
use Snowflake\Abstracts\BaseGoto;
use Snowflake\Abstracts\TraitApplication; use Snowflake\Abstracts\TraitApplication;
use Snowflake\Cache\Redis;
use Snowflake\Error\Logger;
use Snowflake\Event;
use Snowflake\Exception\ComponentException; use Snowflake\Exception\ComponentException;
use Snowflake\Jwt\Jwt;
use Snowflake\Pool\Connection;
use Snowflake\Pool\Pool as SPool;
use Snowflake\Snowflake; use Snowflake\Snowflake;
/** /**
+1 -3
View File
@@ -31,10 +31,8 @@ class OnClose extends Callback
*/ */
public function onHandler(Server $server, int $fd) public function onHandler(Server $server, int $fd)
{ {
Coroutine::defer(function () {
fire(Event::EVENT_AFTER_REQUEST);
});
$this->execute($server, $fd); $this->execute($server, $fd);
fire(Event::SYSTEM_RESOURCE_RELEASES);
} }
+1 -3
View File
@@ -87,10 +87,8 @@ class OnHandshake extends Callback
*/ */
public function onHandler(SRequest $request, SResponse $response): void public function onHandler(SRequest $request, SResponse $response): void
{ {
Coroutine::defer(function () {
fire(Event::EVENT_AFTER_REQUEST);
});
$this->execute($request, $response); $this->execute($request, $response);
fire(Event::SYSTEM_RESOURCE_RELEASES);
} }
+1 -10
View File
@@ -28,7 +28,6 @@ class OnMessage extends Callback
*/ */
public function onHandler(Server $server, Frame $frame) public function onHandler(Server $server, Frame $frame)
{ {
Coroutine::defer([$this, 'onAfter']);
try { try {
if ($frame->opcode != 0x08) { if ($frame->opcode != 0x08) {
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
@@ -41,19 +40,11 @@ class OnMessage extends Callback
$this->addError($exception->getMessage(), 'websocket'); $this->addError($exception->getMessage(), 'websocket');
$server->send($frame->fd, $exception->getMessage()); $server->send($frame->fd, $exception->getMessage());
} finally { } finally {
fire(Event::SYSTEM_RESOURCE_RELEASES);
logger()->insert(); logger()->insert();
} }
} }
/**
* @throws ComponentException
*/
public function onAfter()
{
fire(Event::EVENT_AFTER_REQUEST);
}
/** /**
* @param $event * @param $event
* @param $frame * @param $frame
+3 -4
View File
@@ -35,10 +35,6 @@ class OnRequest extends Callback
*/ */
public function onHandler(Request $request, Response $response): mixed public function onHandler(Request $request, Response $response): mixed
{ {
defer(function () use ($request) {
write(Json::encode(get_object_vars($request)), 'request');
fire(Event::EVENT_AFTER_REQUEST);
});
try { try {
[$req, $rep] = static::create($request, $response); [$req, $rep] = static::create($request, $response);
if ($req->is('favicon.ico')) { if ($req->is('favicon.ico')) {
@@ -50,6 +46,9 @@ class OnRequest extends Callback
return \send($exception->getMessage(), $exception->getCode()); return \send($exception->getMessage(), $exception->getCode());
} }
return $this->sendErrorMessage($exception); return $this->sendErrorMessage($exception);
} finally {
write(Json::encode(get_object_vars($request)), 'request');
fire(Event::SYSTEM_RESOURCE_RELEASES);
} }
} }
+1 -1
View File
@@ -109,7 +109,7 @@ class OnTask extends Callback
$this->error($exception, 'Task'); $this->error($exception, 'Task');
} finally { } finally {
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->trigger(Event::RELEASE_ALL); $event->trigger(Event::SYSTEM_RESOURCE_CLEAN);
Timer::clearAll(); Timer::clearAll();
} }
return $finish; return $finish;
-2
View File
@@ -40,8 +40,6 @@ class Reduce
return $pipe->onHandler($request, $passable); return $pipe->onHandler($request, $passable);
} catch (\Throwable $throwable) { } catch (\Throwable $throwable) {
return Json::to(0, $throwable); return Json::to(0, $throwable);
} finally {
fire(Event::EVENT_AFTER_REQUEST);
} }
}; };
}); });
+1 -1
View File
@@ -89,7 +89,7 @@ class Producer extends Component
}); });
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->on(Event::EVENT_AFTER_REQUEST, [$this, 'flush']); $event->on(Event::SYSTEM_RESOURCE_RELEASES, [$this, 'flush']);
if ($this->producer === null) { if ($this->producer === null) {
$this->producer = Snowflake::createObject(\RdKafka\Producer::class, [$this->conf]); $this->producer = Snowflake::createObject(\RdKafka\Producer::class, [$this->conf]);
+2 -2
View File
@@ -37,8 +37,8 @@ class Redis extends Component
public function init() public function init()
{ {
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->on(Event::RELEASE_ALL, [$this, 'destroy']); $event->on(Event::SYSTEM_RESOURCE_CLEAN, [$this, 'destroy']);
$event->on(Event::EVENT_AFTER_REQUEST, [$this, 'release']); $event->on(Event::SYSTEM_RESOURCE_RELEASES, [$this, 'release']);
$event->on(Event::SERVER_WORKER_START, [$this, 'createPool']); $event->on(Event::SERVER_WORKER_START, [$this, 'createPool']);
$event->on(Event::SERVER_TASK_START, [$this, 'createPool']); $event->on(Event::SERVER_TASK_START, [$this, 'createPool']);
} }
+2 -2
View File
@@ -75,7 +75,7 @@ class ErrorHandler extends Component implements ErrorInterface
$this->category = 'exception'; $this->category = 'exception';
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->trigger(Event::RELEASE_ALL); $event->trigger(Event::SYSTEM_RESOURCE_CLEAN);
$this->sendError($exception->getMessage(), $exception->getFile(), $exception->getLine()); $this->sendError($exception->getMessage(), $exception->getFile(), $exception->getLine());
} }
@@ -103,7 +103,7 @@ class ErrorHandler extends Component implements ErrorInterface
logger()->error($data, 'error'); logger()->error($data, 'error');
$event = Snowflake::app()->getEvent(); $event = Snowflake::app()->getEvent();
$event->trigger(Event::RELEASE_ALL); $event->trigger(Event::SYSTEM_RESOURCE_CLEAN);
throw new \ErrorException($error[1], $error[0], 1, $error[2], $error[3]); throw new \ErrorException($error[1], $error[0], 1, $error[2], $error[3]);
} }
+4 -2
View File
@@ -31,9 +31,11 @@ class Event extends BaseObject
const RECEIVE_CONNECTION = 'SERVER:RECEIVE:CONNECTION'; const RECEIVE_CONNECTION = 'SERVER:RECEIVE:CONNECTION';
const PROCESS_WORKER_STOP = 'SERVER:PROCESS:WORKER:STOP'; const SYSTEM_RESOURCE_RELEASES = 'SYSTEM::RESOURCE::RELEASES';
const SYSTEM_RESOURCE_CLEAN = 'SYSTEM::RESOURCE::CLEAN';
const RELEASE_ALL = 'SERVER:RELEASE:ALL';
const PROCESS_WORKER_STOP = 'SERVER:PROCESS:WORKER:STOP';
const SERVER_AFTER_RELOAD = 'SERVER:AFTER:RELOAD'; const SERVER_AFTER_RELOAD = 'SERVER:AFTER:RELOAD';
const SERVER_BEFORE_RELOAD = 'SERVER:BEFORE:RELOAD'; const SERVER_BEFORE_RELOAD = 'SERVER:BEFORE:RELOAD';