From 62e53d3f8da7c9baad2c7a54a8a1dfcdb611625e Mon Sep 17 00:00:00 2001 From: walkor Date: Sun, 26 Jan 2020 22:09:54 +0800 Subject: [PATCH] performance optimization --- Protocols/Http.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Protocols/Http.php b/Protocols/Http.php index a23e37df1..4fabe3a4c 100644 --- a/Protocols/Http.php +++ b/Protocols/Http.php @@ -43,6 +43,9 @@ class Http */ public static function input($recv_buffer, TcpConnection $connection) { + if (isset(static::$_cache[$recv_buffer]['input'])) { + return static::$_cache[$recv_buffer]['input']; + } $recv_len = \strlen($recv_buffer); $crlf_post = \strpos($recv_buffer, "\r\n\r\n"); if (!$crlf_post) { @@ -61,13 +64,16 @@ public static function input($recv_buffer, TcpConnection $connection) } if ($method === 'GET' || $method === 'OPTIONS' || $method === 'HEAD') { + static::$_cache[$recv_buffer]['input'] = $recv_len; return $recv_len; } $match = array(); if (\preg_match("/\r\nContent-Length: ?(\d+)/i", $recv_buffer, $match)) { $content_length = isset($match[1]) ? $match[1] : 0; - return $content_length + $crlf_post + 4; + $total_length = $content_length + $crlf_post + 4; + static::$_cache[$recv_buffer]['input'] = $total_length; + return $total_length; } return $method === 'DELETE' ? $recv_len : 0; @@ -82,9 +88,9 @@ public static function input($recv_buffer, TcpConnection $connection) */ public static function decode($recv_buffer, TcpConnection $connection) { - if (isset(static::$_cache[$recv_buffer])) { + if (isset(static::$_cache[$recv_buffer]['decode'])) { HttpCache::reset(); - $cache = static::$_cache[$recv_buffer]; + $cache = static::$_cache[$recv_buffer]['decode']; //$cache['server']['REQUEST_TIME_FLOAT'] = \microtime(true); //$cache['server']['REQUEST_TIME'] = (int)$cache['server']['REQUEST_TIME_FLOAT']; $_SERVER = $cache['server']; @@ -93,7 +99,7 @@ public static function decode($recv_buffer, TcpConnection $connection) $_COOKIE = $cache['cookie']; $_REQUEST = $cache['request']; $GLOBALS['HTTP_RAW_POST_DATA'] = $GLOBALS['HTTP_RAW_REQUEST_DATA'] = ''; - return static::$_cache[$recv_buffer]; + return static::$_cache[$recv_buffer]['decode']; } // Init. $_POST = $_GET = $_COOKIE = $_REQUEST = $_SESSION = $_FILES = array(); @@ -230,7 +236,7 @@ public static function decode($recv_buffer, TcpConnection $connection) $_SERVER['REMOTE_PORT'] = $connection->getRemotePort(); $ret = array('get' => $_GET, 'post' => $_POST, 'cookie' => $_COOKIE, 'server' => $_SERVER, 'files' => $_FILES, 'request'=>$_REQUEST); if ($_SERVER['REQUEST_METHOD'] === 'GET') { - static::$_cache[$recv_buffer] = $ret; + static::$_cache[$recv_buffer]['decode'] = $ret; if (\count(static::$_cache) > 256) { unset(static::$_cache[key(static::$_cache)]); }