diff --git a/src/App.php b/src/App.php index cd4b16c..faf9a98 100644 --- a/src/App.php +++ b/src/App.php @@ -12,6 +12,7 @@ use React\EventLoop\Loop; use React\Http\HttpServer; use React\Http\Message\Response; +use React\Http\Middleware\StreamingRequestMiddleware; use React\Promise\Deferred; use React\Promise\PromiseInterface; use React\Socket\SocketServer; @@ -231,9 +232,12 @@ public function run() private function runLoop() { - $http = new HttpServer(function (ServerRequestInterface $request) { - return $this->handleRequest($request); - }); + $http = new HttpServer(...array_merge( + ($this->handler->hastStreamingRequest() ? [new StreamingRequestMiddleware()] : []), + [function (ServerRequestInterface $request) { + return $this->handleRequest($request); + }] + )); $listen = $this->container->getEnv('X_LISTEN') ?? '127.0.0.1:8080'; diff --git a/src/Io/MiddlewareHandler.php b/src/Io/MiddlewareHandler.php index 3feeea0..aac9340 100644 --- a/src/Io/MiddlewareHandler.php +++ b/src/Io/MiddlewareHandler.php @@ -3,6 +3,7 @@ namespace FrameworkX\Io; use Psr\Http\Message\ServerRequestInterface; +use React\Http\Middleware\StreamingRequestMiddleware; /** * @internal @@ -10,12 +11,18 @@ class MiddlewareHandler { private $handlers; + private $hastStreamingRequest = false; public function __construct(array $handlers) { assert(count($handlers) >= 2); $this->handlers = $handlers; + foreach($this->handlers as $handler) { + if ($this->hastStreamingRequest = ($handler instanceof StreamingRequestMiddleware)) { + break; + } + } } public function __invoke(ServerRequestInterface $request) @@ -33,4 +40,8 @@ private function call(ServerRequestInterface $request, int $position) return $this->call($request, $position + 1); }); } + + public function hastStreamingRequest() { + return $this->hastStreamingRequest; + } }