改名
This commit is contained in:
@@ -4,12 +4,15 @@ declare(strict_types=1);
|
|||||||
namespace HttpServer\Events;
|
namespace HttpServer\Events;
|
||||||
|
|
||||||
|
|
||||||
|
use Annotation\Route\After;
|
||||||
use Exception;
|
use Exception;
|
||||||
use HttpServer\Abstracts\Callback;
|
use HttpServer\Abstracts\Callback;
|
||||||
|
use HttpServer\Events\Utility\AfterRequest;
|
||||||
use HttpServer\Exception\ExitException;
|
use HttpServer\Exception\ExitException;
|
||||||
use HttpServer\Http\Request as HRequest;
|
use HttpServer\Http\Request as HRequest;
|
||||||
use HttpServer\Http\Response as HResponse;
|
use HttpServer\Http\Response as HResponse;
|
||||||
use ReflectionException;
|
use ReflectionException;
|
||||||
|
use Snowflake\Async;
|
||||||
use Snowflake\Core\Json;
|
use Snowflake\Core\Json;
|
||||||
use Snowflake\Event;
|
use Snowflake\Event;
|
||||||
use Snowflake\Exception\ComponentException;
|
use Snowflake\Exception\ComponentException;
|
||||||
@@ -36,38 +39,25 @@ class OnRequest extends Callback
|
|||||||
*/
|
*/
|
||||||
public function onHandler(Request $request, Response $response)
|
public function onHandler(Request $request, Response $response)
|
||||||
{
|
{
|
||||||
Coroutine::defer([$this, 'onAfter']);
|
|
||||||
try {
|
try {
|
||||||
/** @var HRequest $sRequest */
|
[$req, $rep] = static::create($request, $response);
|
||||||
[$sRequest, $sResponse] = $this->create($request, $response);
|
if ($req->is('favicon.ico')) {
|
||||||
if ($sRequest->is('favicon.ico')) {
|
send(null, 404);
|
||||||
$sResponse->send($sRequest->isNotFound(), 200);
|
|
||||||
} else {
|
} else {
|
||||||
Snowflake::app()->getRouter()->dispatch();
|
router()->dispatch();
|
||||||
|
}
|
||||||
|
} catch (ExitException | Error | \Throwable $exception) {
|
||||||
|
if ($exception instanceof ExitException) {
|
||||||
|
send($exception->getMessage(), $exception->getCode());
|
||||||
|
} else {
|
||||||
|
$this->sendErrorMessage($exception);
|
||||||
}
|
}
|
||||||
} catch (ExitException $exception) {
|
|
||||||
send($exception->getMessage(), $exception->getCode());
|
|
||||||
} catch (Error | \Throwable $exception) {
|
|
||||||
$this->sendErrorMessage($exception);
|
|
||||||
} finally {
|
} finally {
|
||||||
$logger = Snowflake::app()->getLogger();
|
$this->onAfter();
|
||||||
|
|
||||||
$request = get_object_vars($request);
|
|
||||||
|
|
||||||
$logger->write(Json::encode($request), 'request');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws ComponentException
|
|
||||||
*/
|
|
||||||
public function onAfter()
|
|
||||||
{
|
|
||||||
fire(Event::EVENT_AFTER_REQUEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $request
|
* @param $request
|
||||||
* @param $response
|
* @param $response
|
||||||
@@ -75,12 +65,21 @@ class OnRequest extends Callback
|
|||||||
* @throws NotFindClassException
|
* @throws NotFindClassException
|
||||||
* @throws ReflectionException
|
* @throws ReflectionException
|
||||||
*/
|
*/
|
||||||
private function create($request, $response): array
|
public static function create($request, $response): array
|
||||||
{
|
{
|
||||||
return [HRequest::create($request), HResponse::create($response)];
|
return [HRequest::create($request), HResponse::create($response)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws ComponentException
|
||||||
|
*/
|
||||||
|
public function onAfter()
|
||||||
|
{
|
||||||
|
fire(Event::EVENT_AFTER_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $response
|
* @param $response
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ use HttpServer\Service\Receive;
|
|||||||
use HttpServer\Service\Websocket;
|
use HttpServer\Service\Websocket;
|
||||||
use Kafka\Producer;
|
use Kafka\Producer;
|
||||||
use Annotation\Annotation as SAnnotation;
|
use Annotation\Annotation as SAnnotation;
|
||||||
|
use Snowflake\Async;
|
||||||
use Snowflake\Cache\Redis;
|
use Snowflake\Cache\Redis;
|
||||||
use Snowflake\Di\Service;
|
use Snowflake\Di\Service;
|
||||||
use Snowflake\Error\ErrorHandler;
|
use Snowflake\Error\ErrorHandler;
|
||||||
@@ -46,6 +47,7 @@ use Database\DatabasesProviders;
|
|||||||
* @property \Redis|Redis $redis
|
* @property \Redis|Redis $redis
|
||||||
* @property Server $server
|
* @property Server $server
|
||||||
* @property DatabasesProviders $db
|
* @property DatabasesProviders $db
|
||||||
|
* @property Async $async
|
||||||
* @property Connection $connections
|
* @property Connection $connections
|
||||||
* @property Logger $logger
|
* @property Logger $logger
|
||||||
* @property Jwt $jwt
|
* @property Jwt $jwt
|
||||||
@@ -391,6 +393,16 @@ abstract class BaseApplication extends Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Async
|
||||||
|
* @throws ComponentException
|
||||||
|
*/
|
||||||
|
public function getAsync(): Async
|
||||||
|
{
|
||||||
|
return $this->get('async');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
@@ -410,6 +422,7 @@ abstract class BaseApplication extends Service
|
|||||||
'router' => ['class' => Router::class],
|
'router' => ['class' => Router::class],
|
||||||
'redis' => ['class' => Redis::class],
|
'redis' => ['class' => Redis::class],
|
||||||
'jwt' => ['class' => Jwt::class],
|
'jwt' => ['class' => Jwt::class],
|
||||||
|
'async' => ['class' => Async::class],
|
||||||
'goto' => ['class' => BaseGoto::class],
|
'goto' => ['class' => BaseGoto::class],
|
||||||
'http2' => ['class' => Http2::class],
|
'http2' => ['class' => Http2::class],
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace Snowflake;
|
||||||
|
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use HttpServer\IInterface\Task;
|
||||||
|
use Snowflake\Abstracts\Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Async
|
||||||
|
* @package Snowflake
|
||||||
|
*/
|
||||||
|
class Async extends Component
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Task $class
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public function dispatch(Task $class)
|
||||||
|
{
|
||||||
|
$server = Snowflake::app()->server->getServer();
|
||||||
|
if (!isset($server->setting['task_worker_num']) || !class_exists($class)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$randWorkerId = random_int(0, $server->setting['task_worker_num'] - 1);
|
||||||
|
|
||||||
|
$server->task(serialize($class), $randWorkerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user