This commit is contained in:
xl
2024-09-03 14:47:27 +08:00
parent 12a1aac9e5
commit 92dd75b82c
14 changed files with 159 additions and 297 deletions
-6
View File
@@ -3,7 +3,6 @@
namespace Kiri\Server\Abstracts; namespace Kiri\Server\Abstracts;
use Exception; use Exception;
use Kiri\Exception\ConfigException;
use Kiri\Exception\NotFindClassException; use Kiri\Exception\NotFindClassException;
use Kiri\Server\Config as SConfig; use Kiri\Server\Config as SConfig;
use Kiri\Server\Constant; use Kiri\Server\Constant;
@@ -12,11 +11,6 @@ use Kiri\Server\Events\OnShutdown;
use Kiri\Server\Handler\OnServer; use Kiri\Server\Handler\OnServer;
use Kiri\Server\ServerInterface; use Kiri\Server\ServerInterface;
use Kiri\Server\Task\Task; use Kiri\Server\Task\Task;
use Kiri\Di\Inject\Container;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use ReflectionException;
use Swoole\Server; use Swoole\Server;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
+1 -3
View File
@@ -4,14 +4,12 @@ namespace Kiri\Server\Abstracts;
use Exception; use Exception;
use Kiri; use Kiri;
use Kiri\Di\Inject\Container;
use Psr\Log\LoggerInterface;
use Swoole\Http\Server as HServer; use Swoole\Http\Server as HServer;
use Swoole\Process; use Swoole\Process;
use Swoole\Server; use Swoole\Server;
use Kiri\Server\Processes\BaseProcess;
use Kiri\Server\Constant; use Kiri\Server\Constant;
use Kiri\Server\Config; use Kiri\Server\Config;
use Kiri\Error\StdoutLogger;
use Swoole\WebSocket\Server as WServer; use Swoole\WebSocket\Server as WServer;
trait TraitServer trait TraitServer
-2
View File
@@ -2,9 +2,7 @@
namespace Kiri\Server\Events; namespace Kiri\Server\Events;
use Kiri\Exception\ConfigException;
use Swoole\Server; use Swoole\Server;
use Kiri;
/** /**
* *
-1
View File
@@ -2,7 +2,6 @@
namespace Kiri\Server\Handler; namespace Kiri\Server\Handler;
use Exception;
use Kiri\Server\Abstracts\Server; use Kiri\Server\Abstracts\Server;
use Kiri\Server\Contract\OnPipeMessageInterface; use Kiri\Server\Contract\OnPipeMessageInterface;
-112
View File
@@ -1,112 +0,0 @@
<?php
declare(strict_types=1);
namespace Kiri\Server\Handler;
use Exception;
use Kiri\Di\Inject\Container;
use Kiri\Di\Context;
use Kiri\Di\Interface\ResponseEmitterInterface;
use Kiri\Router\Base\ExceptionHandlerDispatcher;
use Kiri\Router\Constrict\ConstrictRequest as CQ;
use Kiri\Router\Constrict\ConstrictResponse;
use Kiri\Router\DataGrip;
use Kiri\Router\Interface\ExceptionHandlerInterface;
use Kiri\Router\Interface\OnRequestInterface;
use Kiri\Router\RouterCollector;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use ReflectionException;
use Swoole\Http\Request;
use Swoole\Http\Response;
use Throwable;
/**
* OnRequest event
*/
class OnRequest implements OnRequestInterface
{
/**
* @var RouterCollector
*/
public RouterCollector $router;
/**
* @var ExceptionHandlerInterface
*/
public ExceptionHandlerInterface $exception;
/**
* @var ResponseEmitterInterface
*/
public ResponseEmitterInterface $responseEmitter;
/**
* @var ConstrictResponse
*/
#[Container(ConstrictResponse::class)]
public ConstrictResponse $constrictResponse;
/**
* @param ResponseInterface $response
* @param ContainerInterface $container
* @param DataGrip $dataGrip
* @throws
*/
public function __construct(public ResponseInterface $response, DataGrip $dataGrip)
{
$this->responseEmitter = $this->response->emmit;
$exception = \config('exception.http');
if (!in_array(ExceptionHandlerInterface::class, class_implements($exception))) {
$exception = ExceptionHandlerDispatcher::class;
}
$this->exception = \Kiri::getDi()->get($exception);
$this->router = $dataGrip->get(ROUTER_TYPE_HTTP);
}
/**
* @param Request $request
* @param Response $response
* @throws
*/
public function onRequest(Request $request, Response $response): void
{
/** @var CQ $PsrRequest */
try {
$PsrRequest = $this->initRequestAndResponse($request);
$PsrResponse = $this->router->query($request->server['path_info'], $request->getMethod())
->run($PsrRequest);
} catch (Throwable $throwable) {
$PsrResponse = $this->exception->emit($throwable, $this->constrictResponse);
} finally {
$this->responseEmitter->response($PsrResponse, $response, $PsrRequest);
}
}
/**
* @param Request $request
* @return ServerRequestInterface
*/
public function initRequestAndResponse(Request $request): ServerRequestInterface
{
$response = new ConstrictResponse($this->response->contentType);
Context::set(ResponseInterface::class, $response);
return Context::set(RequestInterface::class, CQ::builder($request));
}
}
-1
View File
@@ -6,7 +6,6 @@ use Kiri;
use Kiri\Di\Inject\Container; use Kiri\Di\Inject\Container;
use Kiri\Error\StdoutLogger; use Kiri\Error\StdoutLogger;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use ReflectionException;
use Kiri\Server\Abstracts\Server; use Kiri\Server\Abstracts\Server;
use Kiri\Server\Events\OnBeforeShutdown; use Kiri\Server\Events\OnBeforeShutdown;
use Kiri\Server\Events\OnShutdown; use Kiri\Server\Events\OnShutdown;
-1
View File
@@ -3,7 +3,6 @@
namespace Kiri\Server\Handler; namespace Kiri\Server\Handler;
use Kiri; use Kiri;
use ReflectionException;
use Kiri\Server\Abstracts\Server; use Kiri\Server\Abstracts\Server;
use Kiri\Server\Events\OnManagerStart; use Kiri\Server\Events\OnManagerStart;
use Kiri\Server\Events\OnManagerStop; use Kiri\Server\Events\OnManagerStop;
-1
View File
@@ -13,7 +13,6 @@ use Kiri\Server\Events\OnWorkerExit;
use Kiri\Server\Events\OnWorkerStart; use Kiri\Server\Events\OnWorkerStart;
use Kiri\Server\Events\OnWorkerStop; use Kiri\Server\Events\OnWorkerStop;
use Swoole\Server; use Swoole\Server;
use Kiri\Di\Inject\Container;
use Swoole\Timer; use Swoole\Timer;
use Throwable; use Throwable;
use function config; use function config;
+1 -1
View File
@@ -5,8 +5,8 @@ namespace Kiri\Server;
use Kiri\Di\Context; use Kiri\Di\Context;
use Kiri\Router\Router; use Kiri\Router\Router;
use Kiri\Server\Abstracts\BaseProcess;
use Kiri\Server\Events\OnWorkerStart; use Kiri\Server\Events\OnWorkerStart;
use Kiri\Server\Processes\BaseProcess;
use Swoole\Coroutine; use Swoole\Coroutine;
use Swoole\Event; use Swoole\Event;
use Swoole\Process; use Swoole\Process;
@@ -1,137 +1,132 @@
<?php <?php
namespace Kiri\Server\Abstracts; namespace Kiri\Server\Processes;
use Kiri\Di\Context; use Kiri\Di\Context;
use Kiri\Di\Inject\Container; use Swoole\Coroutine;
use Kiri\Error\StdoutLogger;
use Kiri\Server\Contract\OnProcessInterface; /**
use Psr\Container\ContainerInterface; *
use Psr\Log\LoggerInterface; */
use Swoole\Coroutine; abstract class BaseProcess implements OnProcessInterface
{
/**
* private bool $stop = false;
*/
abstract class BaseProcess implements OnProcessInterface
{ /**
* @var bool
private bool $stop = false; */
protected bool $redirect_stdin_and_stdout = FALSE;
/**
* @var bool /**
*/ * @var int
protected bool $redirect_stdin_and_stdout = FALSE; */
protected int $pipe_type = SOCK_DGRAM;
/**
* @var int /**
*/ * @var bool
protected int $pipe_type = SOCK_DGRAM; */
protected bool $enable_coroutine = false;
/**
* @var bool /**
*/ * @var bool
protected bool $enable_coroutine = false; */
protected bool $enable_queue = false;
/**
* @var bool /**
*/ * @var string
protected bool $enable_queue = false; */
public string $name = '';
/**
* @var string /**
*/ * @return bool
public string $name = ''; */
public function isEnableQueue(): bool
{
/** return $this->enable_queue;
* @return bool }
*/
public function isEnableQueue(): bool
{ /**
return $this->enable_queue; * @return string
} */
public function getName(): string
{
/** if (empty($this->name)) {
* @return string $this->name = uniqid('p.');
*/ }
public function getName(): string return $this->name;
{ }
if (empty($this->name)) {
$this->name = uniqid('p.');
} /**
return $this->name; * @return bool
} */
public function isStop(): bool
{
/** return $this->stop;
* @return bool }
*/
public function isStop(): bool /**
{ * @return bool
return $this->stop; */
} public function getRedirectStdinAndStdout(): bool
{
/** return $this->redirect_stdin_and_stdout;
* @return bool }
*/
public function getRedirectStdinAndStdout(): bool /**
{ * @return int
return $this->redirect_stdin_and_stdout; */
} public function getPipeType(): int
{
/** return $this->pipe_type;
* @return int }
*/
public function getPipeType(): int /**
{ * @return bool
return $this->pipe_type; */
} public function isEnableCoroutine(): bool
{
/** return $this->enable_coroutine;
* @return bool }
*/
public function isEnableCoroutine(): bool
{ /**
return $this->enable_coroutine; *
} */
public function stop(): void
{
/** $this->stop = true;
* }
*/
public function stop(): void
{ /**
$this->stop = true; * @return $this
} */
abstract public function onSigterm(): static;
/**
* @return $this /**
*/ * @param $data
abstract public function onSigterm(): static; * @return void
*/
protected function onShutdown($data): void
/** {
* @param $data $this->stop = true;
* @return void $value = Context::get('waite:process:message');
*/ \Kiri::getLogger()->alert('Process ' . $this->getName() . ' stop');
protected function onShutdown($data): void if (!is_null($value) && Coroutine::exists((int)$value)) {
{ Coroutine::cancel((int)$value);
$this->stop = true; }
$value = Context::get('waite:process:message'); }
\Kiri::getLogger()->alert('Process ' . $this->getName() . ' stop');
if (!is_null($value) && Coroutine::exists((int)$value)) {
Coroutine::cancel((int)$value); }
}
}
}
@@ -1,25 +1,25 @@
<?php <?php
namespace Kiri\Server\Contract; namespace Kiri\Server\Processes;
use Swoole\Process; use Swoole\Process;
/** /**
* Interface BaseProcess * Interface BaseProcess
* @package Contract * @package Contract
*/ */
interface OnProcessInterface interface OnProcessInterface
{ {
/** /**
* @param ?Process $process * @param ?Process $process
*/ */
public function process(?Process $process): void; public function process(?Process $process): void;
} }
-1
View File
@@ -10,7 +10,6 @@ use Kiri\Events\EventDispatch;
use Kiri\Router\Router; use Kiri\Router\Router;
use Kiri\Server\Abstracts\AsyncServer; use Kiri\Server\Abstracts\AsyncServer;
use Kiri\Server\Events\OnShutdown; use Kiri\Server\Events\OnShutdown;
use ReflectionException;
use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
-5
View File
@@ -5,13 +5,8 @@ namespace Kiri\Server\Task;
use Kiri; use Kiri;
use Kiri\Router\Base\ExceptionHandlerDispatcher; use Kiri\Router\Base\ExceptionHandlerDispatcher;
use Kiri\Router\DataGrip;
use Kiri\Router\Interface\ExceptionHandlerInterface; use Kiri\Router\Interface\ExceptionHandlerInterface;
use Kiri\Server\Constant; use Kiri\Server\Constant;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\ResponseInterface;
use Swoole\Server; use Swoole\Server;
/** /**
-1
View File
@@ -2,7 +2,6 @@
namespace Kiri\Server\Task; namespace Kiri\Server\Task;
use Kiri\Di\Inject\Container;
use Kiri\Server\ServerInterface; use Kiri\Server\ServerInterface;
class TaskExecute implements TaskInterface class TaskExecute implements TaskInterface