diff --git a/src/HttpServer.php b/src/HttpServer.php index d5f947d5..95ccc5ff 100644 --- a/src/HttpServer.php +++ b/src/HttpServer.php @@ -247,6 +247,14 @@ public function __construct($requestHandlerOrLoop) $middleware = \array_merge($middleware, $requestHandlers); + /** + * Filter out any configuration middleware, no need to run requests through something that isn't + * doing anything with the request. + */ + $middleware = \array_filter($middleware, function ($handler) { + return !($handler instanceof StreamingRequestMiddleware); + }); + $this->streamingServer = new StreamingServer($loop, new MiddlewareRunner($middleware)); $that = $this; diff --git a/tests/HttpServerTest.php b/tests/HttpServerTest.php index 9a0a789a..9200aa66 100644 --- a/tests/HttpServerTest.php +++ b/tests/HttpServerTest.php @@ -431,4 +431,27 @@ public function testConstructServerWithMemoryLimitDoesLimitConcurrency() $this->assertTrue(is_array($middleware)); $this->assertInstanceOf('React\Http\Middleware\LimitConcurrentRequestsMiddleware', $middleware[0]); } + + public function testConstructFiltersOutConfigurationMiddlewareBefore() + { + $http = new HttpServer(new StreamingRequestMiddleware(), function () { }); + + $ref = new \ReflectionProperty($http, 'streamingServer'); + $ref->setAccessible(true); + + $streamingServer = $ref->getValue($http); + + $ref = new \ReflectionProperty($streamingServer, 'callback'); + $ref->setAccessible(true); + + $middlewareRunner = $ref->getValue($streamingServer); + + $ref = new \ReflectionProperty($middlewareRunner, 'middleware'); + $ref->setAccessible(true); + + $middleware = $ref->getValue($middlewareRunner); + + $this->assertTrue(is_array($middleware)); + $this->assertCount(1, $middleware); + } }