diff --git a/kiri-server/Abstracts/BaseProcess.php b/kiri-server/Abstracts/BaseProcess.php deleted file mode 100644 index 56d8ad60..00000000 --- a/kiri-server/Abstracts/BaseProcess.php +++ /dev/null @@ -1,143 +0,0 @@ -name; - } - - - /** - * @return bool - */ - public function isStop(): bool - { - return $this->isStop; - } - - /** - * @return mixed - */ - public function getRedirectStdinAndStdout(): mixed - { - return $this->redirect_stdin_and_stdout; - } - - /** - * @return int - */ - public function getPipeType(): int - { - return $this->pipe_type; - } - - /** - * @return bool - */ - public function isEnableCoroutine(): bool - { - return $this->enable_coroutine; - } - - - /** - * - */ - public function onProcessStop(): void - { - $this->isStop = true; - } - - - /** - * @return bool - */ - public function checkProcessIsStop(): bool - { - return $this->isStop === true; - } - - - /** - * @param Process $process - */ - public function signListen(Process $process): void - { - } - - - /** - * - */ - protected function exit(): void - { - putenv('process.status=idle'); - } - - - /** - * @return bool - */ - #[Pure] public function isWorking(): bool - { - return env('process.status', 'working') == 'working'; - } - - - /** - * - */ - private function waiteExit(Process $process): void - { - $this->onProcessStop(); - while ($this->isWorking()) { - $this->sleep(); - } - $process->exit(0); - } - - - /** - * - */ - private function sleep(): void - { - if ($this->enable_coroutine) { - Coroutine::sleep(0.1); - } else { - usleep(100); - } - } - -} diff --git a/kiri-server/Constant.php b/kiri-server/Constant.php deleted file mode 100644 index 7c6efc39..00000000 --- a/kiri-server/Constant.php +++ /dev/null @@ -1,133 +0,0 @@ -HTTP 404 Not Found
Powered by Swoole'; - const STATUS_405_MESSAGE = '

HTTP 405 Method allow


Powered by Swoole'; - - - const OPTION_REACTOR_NUM = 'reactor_num'; - const OPTION_WORKER_NUM = 'worker_num'; - const OPTION_MAX_REQUEST = 'max_request'; - const OPTION_MAX_CONN = 'max_connection'; - const OPTION_TASK_WORKER_NUM = 'task_worker_num'; - const OPTION_TASK_IPC_MODE = 'task_ipc_mode'; - const OPTION_TASK_MAX_REQUEST = 'task_max_request'; - const OPTION_TASK_TMPDIR = 'task_tmpdir'; - const OPTION_TASK_ENABLE_COROUTINE = 'task_enable_coroutine'; - const OPTION_TASK_USE_OBJECT = 'task_use_object'; - const OPTION_DISPATCH_MODE = 'dispatch_mode'; - const OPTION_DISPATCH_FUNC = 'dispatch_func'; - const OPTION_MESSAGE_QUEUE_KEY = 'message_queue_key'; - const OPTION_DAEMONIZE = 'daemonize'; - const OPTION_BACKLOG = 'backlog'; - const OPTION_LOG_FILE = 'log_file'; - const OPTION_LOG_LEVEL = 'log_level'; - const OPTION_LOG_DATE_WITH_MICROSECONDS = 'log_date_with_microseconds'; - const OPTION_LOG_ROTATION = 'log_rotation'; - const OPTION_LOG_DATE_FORMAT = 'log_date_format'; - const OPTION_OPEN_TCP_KEEPALIVE = 'open_tcp_keepalive'; - const OPTION_HEARTBEAT_CHECK_INTERVAL = 'heartbeat_check_interval'; - const OPTION_HEARTBEAT_IDLE_TIME = 'heartbeat_idle_time'; - const OPTION_OPEN_EOF_CHECK = 'open_eof_check'; - const OPTION_OPEN_EOF_SPLIT = 'open_eof_split'; - const OPTION_PACKAGE_EOF = 'package_eof'; - const OPTION_OPEN_LENGTH_CHECK = 'open_length_check'; - const OPTION_PACKAGE_LENGTH_TYPE = 'package_length_type'; - const OPTION_PACKAGE_LENGTH_FUNC = 'package_length_func'; - const OPTION_PACKAGE_MAX_LENGTH = 'package_max_length'; - const OPTION_OPEN_HTTP_PROTOCOL = 'open_http_protocol'; - const OPTION_OPEN_MQTT_PROTOCOL = 'open_mqtt_protocol'; - const OPTION_OPEN_REDIS_PROTOCOL = 'open_redis_protocol'; - const OPTION_OPEN_WEBSOCKET_PROTOCOL = 'open_websocket_protocol'; - const OPTION_OPEN_WEBSOCKET_CLOSE_FRAME = 'open_websocket_close_frame'; - const OPTION_OPEN_TCP_NODELAY = 'open_tcp_nodelay'; - const OPTION_OPEN_CPU_AFFINITY = 'open_cpu_affinity'; - const OPTION_CPU_AFFINITY_IGNORE = 'cpu_affinity_ignore'; - const OPTION_TCP_DEFER_ACCEPT = 'tcp_defer_accept'; - const OPTION_SSL_CERT_FILE = 'ssl_cert_file'; - const OPTION_SSL_KEY_FILE = 'ssl_key_file'; - const OPTION_SSL_METHOD = 'ssl_method'; - const OPTION_SSL_PROTOCOLS = 'ssl_protocols'; - const OPTION_SSL_SNI_CERTS = 'ssl_sni_certs'; - const OPTION_SSL_CIPHERS = 'ssl_ciphers'; - const OPTION_SSL_VERIFY_PEER = 'ssl_verify_peer'; - const OPTION_SSL_ALLOW_SELF_SIGNED = 'ssl_allow_self_signed'; - const OPTION_SSL_CLIENT_CERT_FILE = 'ssl_client_cert_file'; - const OPTION_SSL_COMPRESS = 'ssl_compress'; - const OPTION_SSL_VERIFY_DEPTH = 'ssl_verify_depth'; - const OPTION_SSL_PREFER_SERVER_CIPHERS = 'ssl_prefer_server_ciphers'; - const OPTION_SSL_DHPARAM = 'ssl_dhparam'; - const OPTION_SSL_ECDH_CURVE = 'ssl_ecdh_curve'; - const OPTION_USER = 'user'; - const OPTION_GROUP = 'group'; - const OPTION_CHROOT = 'chroot'; - const OPTION_PID_FILE = 'pid_file'; - const OPTION_BUFFER_INPUT_SIZE = 'buffer_input_size'; - const OPTION_BUFFER_OUTPUT_SIZE = 'buffer_output_size'; - const OPTION_SOCKET_BUFFER_SIZE = 'socket_buffer_size'; - const OPTION_ENABLE_UNSAFE_EVENT = 'enable_unsafe_event'; - const OPTION_DISCARD_TIMEOUT_REQUEST = 'discard_timeout_request'; - const OPTION_ENABLE_REUSE_PORT = 'enable_reuse_port'; - const OPTION_ENABLE_DELAY_RECEIVE = 'enable_delay_receive'; - const OPTION_RELOAD_ASYNC = 'reload_async'; - const OPTION_MAX_WAIT_TIME = 'max_wait_time'; - const OPTION_TCP_FASTOPEN = 'tcp_fastopen'; - const OPTION_REQUEST_SLOWLOG_FILE = 'request_slowlog_file'; - const OPTION_ENABLE_COROUTINE = 'enable_coroutine'; - const OPTION_MAX_COROUTINE = 'max_coroutine'; - const OPTION_SEND_YIELD = 'send_yield'; - const OPTION_SEND_TIMEOUT = 'send_timeout'; - const OPTION_HOOK_FLAGS = 'hook_flags'; - const OPTION_BUFFER_HIGH_WATERMARK = 'buffer_high_watermark'; - const OPTION_BUFFER_LOW_WATERMARK = 'buffer_low_watermark'; - const OPTION_TCP_USER_TIMEOUT = 'tcp_user_timeout'; - const OPTION_STATS_FILE = 'stats_file'; - const OPTION_EVENT_OBJECT = 'event_object'; - const OPTION_START_SESSION_ID = 'start_session_id'; - const OPTION_SINGLE_THREAD = 'single_thread'; - const OPTION_MAX_QUEUED_BYTES = 'max_queued_bytes'; - - -} diff --git a/kiri-server/Contract/OnBeforeShutdown.php b/kiri-server/Contract/OnBeforeShutdown.php deleted file mode 100644 index e5397e5c..00000000 --- a/kiri-server/Contract/OnBeforeShutdown.php +++ /dev/null @@ -1,8 +0,0 @@ - Server::class, - Constant::SERVER_TYPE_TCP => Server::class, - Constant::SERVER_TYPE_UDP => Server::class, - Constant::SERVER_TYPE_HTTP => HServer::class, - Constant::SERVER_TYPE_WEBSOCKET => HServer::class, - ]; - - - /** - * @param array $configs - * @param bool $daemon - * @throws Exception - */ - public function initBaseServer(array $configs, bool $daemon) - { - $configs['ports'] = $this->sortService($configs['ports']); - foreach ($configs['ports'] as $n => $config) { - $this->servers[$config['name'] ?? $n] = $this->addListener($config); - } - } - - - /** - * @param array $config - * @return mixed - * @throws ReflectionException - */ - private function addListener(array $config): mixed - { - /** @var HServer|Server $port */ - $class = self::SERVER_CLASS[$config['type']]; - $port = new $class($config['host'], $config['port'], $config['isSsl'] ?? false, $config['reuse_port'] ?? true); - $port->set($config['settings'] ?? []); - if ($config['type'] == Constant::SERVER_TYPE_HTTP) { - $port->handle('/', fn($request, $response) => $this->onRequestHandle($request, $response, $config)); - } else if ($config['type'] == Constant::SERVER_TYPE_WEBSOCKET) { - $port->handle('/', fn($request, $response) => $this->onWebsocketHandle($request, $response, $config)); - } else { - $port->handle(fn(Connection $connection) => $this->onConnectionHandle($connection, $config)); - } - return $this->eventListener($port, $config); - } - - - /** - * @param Request $request - * @param Response $response - * @param $config - */ - protected function onRequestHandle(Request $request, Response $response, $config) - { - if (isset($config[Constant::REQUEST])) { - call_user_func($config[Constant::REQUEST], $request, $response); - return; - } - $response->status(505); - $response->end(); - } - - - /** - * @param Request $request - * @param Response $response - * @param $config - */ - protected function onWebsocketHandle(Request $request, Response $response, $config) - { - $handshake = $config[Constant::HANDSHAKE] ?? null; - if (!is_null($handshake)) { - call_user_func($handshake, $request, $response); - } else { - $response->upgrade(); - $open = $config[Constant::OPEN] ?? null; - if (!is_null($open)) { - call_user_func($open, $request); - } - } - $close = $config[Constant::CLOSE] ?? null; - $message = $config[Constant::MESSAGE] ?? null; - while (true) { - $data = $response->recv(); - if ($data === '' || $data === false) { - $response->close(); - call_user_func($close, $response->fd); - } else { - call_user_func($message, $data); - } - } - } - - - /** - * @param Connection $connection - * @param $config - */ - protected function onConnectionHandle(Connection $connection, $config) - { - call_user_func($config[Constant::RECEIVE] ?? null, $connection); - } - - - /** - * @throws ConfigException - * @throws ReflectionException - */ - public function start(): void - { - $this->startProcess(); - run(function () { - $this->startServers(); - }); - } - - - /** - * @return array - * @throws ConfigException|ReflectionException - */ - private function startProcess(): array - { - $processes = []; - $system = sprintf('[%s].process', Config::get('id', 'system-service')); - foreach ($this->process as $process) { - /** @var BaseProcess $process */ - if (is_string($process)) { - $process = Kiri::getDi()->get($process); - } - $sowProcess = new Process([$process, 'onHandler'], $process->getRedirectStdinAndStdout(), - $process->getPipeType(), $process->isEnableCoroutine()); - if (Kiri::getPlatform()->isLinux()) { - $sowProcess->name($system . '(' . $process->getName() . ')'); - } - $sowProcess->start(); - $processes[] = $sowProcess; - } - return $processes; - } - - - private function startServers() - { - foreach ($this->servers as $server) { - Coroutine::create(fn() => $server->start()); - } - } - - - /** - * @param mixed $server - * @param array $config - * @return mixed - * @throws ReflectionException - */ - private function eventListener(mixed $server, array $config): mixed - { - foreach ($config['events'] as $key => $value) { - if (is_array($value) && is_string($value[0])) { - $value[0] = Kiri::getDi()->get($value[0]); - } - $server->on($key, $value); - } - return $server; - } - -} diff --git a/kiri-server/SoloAsyncServer.php b/kiri-server/SoloAsyncServer.php deleted file mode 100644 index 06d114ba..00000000 --- a/kiri-server/SoloAsyncServer.php +++ /dev/null @@ -1,143 +0,0 @@ - Server::class, - Constant::SERVER_TYPE_HTTP => HServer::class, - Constant::SERVER_TYPE_WEBSOCKET => WServer::class - ]; - - - /** - * @param array $configs - * @param bool $daemon - * @throws Exception - */ - public function initBaseServer(array $configs, bool $daemon) - { - $configs['ports'] = $this->sortService($configs['ports']); - foreach ($configs['ports'] as $config) { - $service = $this->addListener($config); - if (!$this->server) { - $this->server = $service; - } - } - $this->startProcess(); - } - - - /** - * @throws ConfigException|ReflectionException - */ - private function startProcess() - { - $system = sprintf('[%s].process', Config::get('id', 'system-service')); - foreach ($this->process as $process) { - /** @var BaseProcess $process */ - if (is_string($process)) { - $process = Kiri::getDi()->get($process); - } - $sowProcess = new Process([$process, 'onHandler'], $process->getRedirectStdinAndStdout(), - $process->getPipeType(), $process->isEnableCoroutine()); - if (Kiri::getPlatform()->isLinux()) { - $sowProcess->name($system . '(' . $process->getName() . ')'); - } - $this->server->addProcess($sowProcess); - } - } - - - /** - * @param array $config - * @return mixed - * @throws Exception - */ - private function addListener(array $config): Server\Port - { - $config = $this->resetConfig($config); - if (!$this->server) { - $class = self::SERVER_CLASS[$config['type']]; - $port = new $class($config['host'], $config['port'], SWOOLE_PROCESS, $config['mode']); - $config['settings'] = array_merge(Config::get('server.settings', []), $config['settings']); - $config['settings'][Constant::OPTION_DAEMONIZE] = 0; - } else { - $port = $this->server->addlistener($config['host'], $config['port'], $config['mode']); - if ($port === false) { - throw new Exception("The port is already in use[{$config['host']}::{$config['port']}]"); - } - } - $port->set($config['settings'] ?? []); - return $this->eventListener($port, $config); - } - - - /** - * @param Server\Port|Server|HServer|WServer $server - * @throws ReflectionException - */ - private function eventListener(mixed $server, array $config): Server\Port|HServer|Server|WServer - { - foreach ($config['events'] as $key => $value) { - if (is_array($value) && is_string($value[0])) { - $value[0] = Kiri::getDi()->get($value[0]); - } - $server->on($key, $value); - } - return $server; - } - - - public function start() - { - $this->server->start(); - } - - - /** - * @param array $config - * @return array - */ - private function resetConfig(array $config): array - { - if ($config['type'] == Constant::SERVER_TYPE_HTTP && !isset($config['settings']['open_http_protocol'])) { - $config['settings']['open_http_protocol'] = true; - if ($this->server && in_array($this->server->setting['dispatch_mode'], [2, 4])) { - $config['settings']['open_http2_protocol'] = true; - } - } - if ($config['type'] == Constant::SERVER_TYPE_WEBSOCKET && !isset($config['settings']['open_websocket_protocol'])) { - $config['settings']['open_websocket_protocol'] = true; - } - return $config; - } - - -} diff --git a/kiri-server/SwooleServerInterface.php b/kiri-server/SwooleServerInterface.php deleted file mode 100644 index 8b9867c0..00000000 --- a/kiri-server/SwooleServerInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -process[] = $process; - } - - - /** - * @param array $ports - * @return array - */ - public function sortService(array $ports): array - { - $array = []; - foreach ($ports as $port) { - if ($port['type'] == Constant::SERVER_TYPE_WEBSOCKET) { - array_unshift($array, $port); - } else if ($port['type'] == Constant::SERVER_TYPE_HTTP) { - if (!empty($array) && $array[0]['type'] == Constant::SERVER_TYPE_WEBSOCKET) { - $array[] = $port; - } else { - array_unshift($array, $port); - } - } else { - $array[] = $port; - } - } - return $array; - } - -}