From 65d6cd43fa5986093199c91d3044dccc6fec38b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Thu, 18 Mar 2021 14:34:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HttpServer/Events/OnHandshake.php | 57 +++++++++++++++++-------------- HttpServer/Events/OnMessage.php | 9 +++-- System/Pool/Redis.php | 2 +- 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/HttpServer/Events/OnHandshake.php b/HttpServer/Events/OnHandshake.php index 2116e706..dc89b3b7 100644 --- a/HttpServer/Events/OnHandshake.php +++ b/HttpServer/Events/OnHandshake.php @@ -86,9 +86,22 @@ class OnHandshake extends Callback */ public function onHandler(SRequest $request, SResponse $response): void { - $this->execute($request, $response); - fire(Event::SYSTEM_RESOURCE_RELEASES); - logger()->insert(); + try { + $this->execute($request, $response); + + $clientInfo = Snowflake::getWebSocket()->getClientInfo($request->fd); + + $event = Snowflake::app()->getEvent(); + + $eventName = 'listen ' . $clientInfo['server_port'] . ' ' . Event::SERVER_HANDSHAKE; + $event->trigger($eventName, [$request, $response]); + } catch (\Throwable $exception) { + $this->addError($exception); + $this->disconnect($response, 500); + } finally { + fire(Event::SYSTEM_RESOURCE_CLEAN); + logger()->insert(); + } } @@ -100,30 +113,22 @@ class OnHandshake extends Callback */ private function execute(SRequest $request, SResponse $response): mixed { - try { - $this->resolveParse($request, $response); - if (isset($request->get['debug']) && $request->get['debug'] == 'test') { - return $this->connect($response, 101); - } - $router = Snowflake::app()->getRouter(); - - $sRequest = Request::create($request); - $sRequest->uri = '/' . Socket::HANDSHAKE . '::event'; - $sRequest->headers->replace('request_method', 'sw::socket'); - $sRequest->headers->replace('request_uri', $sRequest->uri); - $sRequest->parseUri(); - - if (($node = $router->find_path($sRequest)) === null) { - return $this->disconnect($response, 502); - } - return $node->dispatch($request, $response); - } catch (\Throwable $exception) { - $this->addError($exception); - return $this->disconnect($response, 500); - } finally { - fire(Event::SYSTEM_RESOURCE_CLEAN); - logger()->insert(); + $this->resolveParse($request, $response); + if (isset($request->get['debug']) && $request->get['debug'] == 'test') { + return $this->connect($response, 101); } + $router = Snowflake::app()->getRouter(); + + $sRequest = Request::create($request); + $sRequest->uri = '/' . Socket::HANDSHAKE . '::event'; + $sRequest->headers->replace('request_method', 'sw::socket'); + $sRequest->headers->replace('request_uri', $sRequest->uri); + $sRequest->parseUri(); + + if (($node = $router->find_path($sRequest)) === null) { + return $this->disconnect($response, 502); + } + return $node->dispatch($request, $response); } diff --git a/HttpServer/Events/OnMessage.php b/HttpServer/Events/OnMessage.php index fc6a46a6..f977eddf 100644 --- a/HttpServer/Events/OnMessage.php +++ b/HttpServer/Events/OnMessage.php @@ -62,10 +62,13 @@ class OnMessage extends Callback * @return mixed * @throws Exception */ - private function resolve($event, Frame $frame, $server): mixed + private function resolve($event, Frame $frame,Server $server): mixed { - if ($event->exists(Event::SERVER_MESSAGE)) { - $event->trigger(Event::SERVER_MESSAGE, [$server, $frame]); + $clientInfo = $server->getClientInfo($frame->fd); + + $eventName = 'listen ' . $clientInfo['server_port'] . ' ' . Event::SERVER_MESSAGE; + if ($event->exists($eventName)) { + $event->trigger($eventName, [$server, $frame]); } else { $frame->data = json_decode($frame->data, true); } diff --git a/System/Pool/Redis.php b/System/Pool/Redis.php index 9bac79cd..d8bcd1dd 100644 --- a/System/Pool/Redis.php +++ b/System/Pool/Redis.php @@ -59,7 +59,7 @@ class Redis extends Pool { $this->printClients($config['host'], $name, true); $redis = new SRedis(); - if (!$redis->connect($config['host'], (int)$config['port'], $config['timeout'])) { + if (!$redis->pconnect($config['host'], (int)$config['port'], $config['timeout'])) { throw new RedisConnectException(sprintf('The Redis Connect %s::%d Fail.', $config['host'], $config['port'])); } if (empty($config['auth']) || !$redis->auth($config['auth'])) {