walkor 1 rok pred
rodič
commit
7c458a9e4f

+ 14 - 4
src/Connection/TcpConnection.php

@@ -657,11 +657,15 @@ class TcpConnection extends ConnectionInterface implements JsonSerializable
                     ++self::$statistics['total_request'];
                     $request = $requests[$buffer];
                     if ($request instanceof Request) {
-                        $request = clone $request;
-                        $requests[$buffer] = $request;
                         $request->connection = $this;
                         $this->request = $request;
-                        $request->properties = [];
+                        try {
+                            ($this->onMessage)($this, $request);
+                        } catch (Throwable $e) {
+                            $this->error($e);
+                        }
+                        $requests[$buffer] = clone $request;
+                        return;
                     }
                     try {
                         ($this->onMessage)($this, $request);
@@ -729,10 +733,16 @@ class TcpConnection extends ConnectionInterface implements JsonSerializable
                     $parser = $this->protocol;
                     $request = $parser::decode($oneRequestBuffer, $this);
                     if (static::$enableCache && (!is_object($request) || $request instanceof Request) && $one && !isset($oneRequestBuffer[static::MAX_CACHE_STRING_LENGTH])) {
-                        $requests[$oneRequestBuffer] = $request;
+                        ($this->onMessage)($this, $request);
+                        if ($request instanceof Request) {
+                            $requests[$oneRequestBuffer] = clone $request;
+                        } else {
+                            $requests[$oneRequestBuffer] = $request;
+                        }
                         if (count($requests) > static::MAX_CACHE_SIZE) {
                             unset($requests[key($requests)]);
                         }
+                        return;
                     }
                     ($this->onMessage)($this, $request);
                 } catch (Throwable $e) {

+ 0 - 32
src/Protocols/Http.php

@@ -61,13 +61,6 @@ class Http
     protected static string $uploadTmpDir = '';
 
     /**
-     * Cache.
-     *
-     * @var bool.
-     */
-    protected static bool $enableCache = true;
-
-    /**
      * Get or set the request class name.
      *
      * @param class-string|null $className
@@ -82,16 +75,6 @@ class Http
     }
 
     /**
-     * Enable or disable Cache.
-     *
-     * @param bool $value
-     */
-    public static function enableCache(bool $value): void
-    {
-        static::$enableCache = $value;
-    }
-
-    /**
      * Check the integrity of the package.
      *
      * @param string $buffer
@@ -166,24 +149,9 @@ class Http
      */
     public static function decode(string $buffer, TcpConnection $connection): Request
     {
-        static $requests = [];
-        $cacheable = static::$enableCache && !isset($buffer[TcpConnection::MAX_CACHE_STRING_LENGTH]);
-        if (isset($requests[$buffer])) {
-            $request = clone $requests[$buffer];
-            $request->connection = $connection;
-            $connection->request = $request;
-            $request->properties = [];
-            return $request;
-        }
         $request = new static::$requestClass($buffer);
         $request->connection = $connection;
         $connection->request = $request;
-        if (true === $cacheable) {
-            $requests[$buffer] = $request;
-            if (count($requests) > TcpConnection::MAX_CACHE_SIZE) {
-                unset($requests[key($requests)]);
-            }
-        }
         return $request;
     }
 

+ 21 - 23
src/Protocols/Http/Request.php

@@ -72,6 +72,20 @@ class Request implements Stringable
     public static int $maxFileUploads = 1024;
 
     /**
+     * Maximum string length for cache
+     *
+     * @var int
+     */
+    public const MAX_CACHE_STRING_LENGTH = 4096;
+
+    /**
+     * Maximum cache size.
+     *
+     * @var int
+     */
+    public const MAX_CACHE_SIZE = 256;
+
+    /**
      * Properties.
      *
      * @var array
@@ -100,13 +114,6 @@ class Request implements Stringable
     protected bool $isDirty = false;
 
     /**
-     * Enable cache.
-     *
-     * @var bool
-     */
-    protected static bool $enableCache = true;
-
-    /**
      * Session id.
      *
      * @var mixed
@@ -432,16 +439,6 @@ class Request implements Stringable
     }
 
     /**
-     * Enable or disable cache.
-     *
-     * @param bool $value
-     */
-    public static function enableCache(bool $value): void
-    {
-        static::$enableCache = $value;
-    }
-
-    /**
      * Parse first line of http header buffer.
      *
      * @return void
@@ -481,7 +478,7 @@ class Request implements Stringable
             return;
         }
         $headBuffer = substr($rawHead, $endLinePosition + 2);
-        $cacheable = static::$enableCache && !isset($headBuffer[4096]);
+        $cacheable = !isset($headBuffer[static::MAX_CACHE_STRING_LENGTH]);
         if ($cacheable && isset($cache[$headBuffer])) {
             $this->data['headers'] = $cache[$headBuffer];
             return;
@@ -504,7 +501,7 @@ class Request implements Stringable
         }
         if ($cacheable) {
             $cache[$headBuffer] = $this->data['headers'];
-            if (count($cache) > 128) {
+            if (count($cache) > static::MAX_CACHE_SIZE) {
                 unset($cache[key($cache)]);
             }
         }
@@ -523,7 +520,7 @@ class Request implements Stringable
         if ($queryString === '') {
             return;
         }
-        $cacheable = static::$enableCache && !isset($queryString[1024]);
+        $cacheable = !isset($queryString[static::MAX_CACHE_STRING_LENGTH]);
         if ($cacheable && isset($cache[$queryString])) {
             $this->data['get'] = $cache[$queryString];
             return;
@@ -531,7 +528,7 @@ class Request implements Stringable
         parse_str($queryString, $this->data['get']);
         if ($cacheable) {
             $cache[$queryString] = $this->data['get'];
-            if (count($cache) > 256) {
+            if (count($cache) > static::MAX_CACHE_SIZE) {
                 unset($cache[key($cache)]);
             }
         }
@@ -556,7 +553,7 @@ class Request implements Stringable
         if ($bodyBuffer === '') {
             return;
         }
-        $cacheable = static::$enableCache && !isset($bodyBuffer[1024]);
+        $cacheable = !isset($bodyBuffer[static::MAX_CACHE_STRING_LENGTH]);
         if ($cacheable && isset($cache[$bodyBuffer])) {
             $this->data['post'] = $cache[$bodyBuffer];
             return;
@@ -568,7 +565,7 @@ class Request implements Stringable
         }
         if ($cacheable) {
             $cache[$bodyBuffer] = $this->data['post'];
-            if (count($cache) > 256) {
+            if (count($cache) > static::MAX_CACHE_SIZE) {
                 unset($cache[key($cache)]);
             }
         }
@@ -807,6 +804,7 @@ class Request implements Stringable
      */
     public function __clone()
     {
+        $this->properties = [];
         if ($this->isDirty) {
             unset($this->data['get'], $this->data['post'], $this->data['headers']);
         }