diff --git a/HttpServer/Events/OnMessage.php b/HttpServer/Events/OnMessage.php index 13d5e3f8..4008d9c6 100644 --- a/HttpServer/Events/OnMessage.php +++ b/HttpServer/Events/OnMessage.php @@ -9,6 +9,7 @@ use Exception; use HttpServer\Abstracts\Callback; use HttpServer\Http\Context; use Snowflake\Abstracts\Config; +use Snowflake\Core\Json; use Snowflake\Event; use Snowflake\Exception\ComponentException; use Snowflake\Snowflake; @@ -31,19 +32,21 @@ class OnMessage extends Callback public function onHandler(Server $server, Frame $frame) { try { - if ($frame->opcode != 0x08) { - $event = Snowflake::app()->getEvent(); - $content = $this->resolve($event, $frame, $server); - if (!empty($content)) { - $server->send($frame->fd, $content); - } + Coroutine::defer(function () { + fire(Event::SYSTEM_RESOURCE_RELEASES); + Snowflake::app()->getLogger()->insert(); + }); + if ($frame->opcode == 0x08) { + return; + } + $event = Snowflake::app()->getEvent(); + $content = $this->resolve($event, $frame, $server); + if (!empty($content)) { + $server->send($frame->fd, $content); } } catch (\Throwable $exception) { $this->addError($exception, 'websocket'); $server->send($frame->fd, $exception->getMessage()); - } finally { - fire(Event::SYSTEM_RESOURCE_RELEASES); - logger()->insert(); } } diff --git a/HttpServer/Events/OnRequest.php b/HttpServer/Events/OnRequest.php index 6eef5632..0994a5bf 100644 --- a/HttpServer/Events/OnRequest.php +++ b/HttpServer/Events/OnRequest.php @@ -15,6 +15,7 @@ use Snowflake\Event; use Snowflake\Exception\ComponentException; use Snowflake\Exception\NotFindClassException; use Snowflake\Snowflake; +use Swoole\Coroutine; use Swoole\Error; use Swoole\Http\Request; use Swoole\Http\Response; @@ -36,20 +37,21 @@ class OnRequest extends Callback public function onHandler(Request $request, Response $response): mixed { try { + Coroutine::defer(function () use ($request) { + write(Json::encode(get_object_vars($request)), 'request'); + fire(Event::SYSTEM_RESOURCE_RELEASES); + }); [$req, $rep] = static::create($request, $response); if ($req->is('favicon.ico')) { return \send(null, 404); } return \router()->dispatch(); } catch (ExitException | Error | \Throwable $exception) { - $this->addError($exception); + $this->addError($exception); if ($exception instanceof ExitException) { return \send($exception->getMessage(), $exception->getCode()); } return $this->sendErrorMessage($exception); - } finally { - write(Json::encode(get_object_vars($request)), 'request'); - fire(Event::SYSTEM_RESOURCE_RELEASES); } }