CLI process manager for modern Request-Response PHP Applications - with a builtin load-balancer.
andig on 2.4.0
andig on andig-patch-1
andig on master
Upgrade fixer (#550) (compare)
andig on master
Fix trim(nil) deprecated causin… (compare)
memory leaks only happen if the developer of a library/the application is not aware that the app is handling several request over linger time. php itself does t have issue with it
and one process =one request is already what php-fpm is doing
I read that as php-pm
so do you think it would make sense to try to find a middleground between PHP-FPM and PHP-PM? Like this:
?
I can see several options for how, but I want to make sure the premise is all right?
fastcgi_finish_request()
, maybe like fastcgi_request_ready()
) -> PHP-FPM stops the process and waits for a request -> when a request comes in, PHP-FPM populates the global variables ($_GET
, etc.) and resumes the execution of the PHP script right were it stopped[www-data@sp-prod1 backend]$ composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- php-pm/php-pm dev-master requires react/http dev-master#cd15204bd15d106d7832c680e4fb0ca0ce2f5e30 -> satisfiable by react/http[dev-master].
- php-pm/php-pm dev-master requires react/http dev-master#cd15204bd15d106d7832c680e4fb0ca0ce2f5e30 -> satisfiable by react/http[dev-master].
- Removal request for react/http == 9999999-dev
- Installation request for php-pm/php-pm dev-master -> satisfiable by php-pm/php-pm[dev-master].
So, i trying setup basic app, based on PSR-7 and Zend\Stratigility. I repeat example from php-pm/php-pm-psr7 but i have error:
Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Type error: Argument 2 passed to Zend\Stratigility\MiddlewarePipe::process() must be an instance of Interop\Http\ServerMiddleware\DelegateInterface, null given, called in php-pm/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php on line 86 in php-pm/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php:99
Pls. i need help =(
public function createResponse(FilesystemInterface $filesystem): StreamedResponse
{
$response = new StreamedResponse();
$response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_INLINE,$this->getAsciiFilename());
$response->headers->set("Content-Type",$this->getMimeType());
$response->headers->set("Content-Length", $this->getSize());
$response->setCallback(function () use ($filesystem) {
$resource = $this->readStream($filesystem);
fpassthru($resource);
fclose($resource);
});
return $response;
}
string(4217) "Symfony\Component\Debug\Exception\ContextErrorException: Warning: Cannot modify header information - headers already sent by (output started at /var/www/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/Response.php:1276) in /ppm/vendor/php-pm/httpkernel-adapter/Bridges/HttpKernel.php:231
Stack trace:
#0 /ppm/vendor/php-pm/httpkernel-adapter/Bridges/HttpKernel.php(101): PHPPM\Bridges\HttpKernel->mapResponse(Object(Symfony\Component\HttpFoundation\StreamedResponse))
#1 /ppm/vendor/php-pm/php-pm/src/ProcessSlave.php(406): PHPPM\Bridges\HttpKernel->handle(Object(React\Http\Io\ServerRequest))
#2 /ppm/vendor/php-pm/php-pm/src/ProcessSlave.php(367): PHPPM\ProcessSlave->handleRequest(Object(React\Http\Io\ServerRequest))
#3 /ppm/vendor/react/http/src/Io/MiddlewareRunner.php(52): PHPPM\ProcessSlave->onRequest(Object(React\Http\Io\ServerRequest), Object(Closure))
#4 /ppm/vendor/react/http/src/Io/MiddlewareRunner.php(48): React\Http\Io\MiddlewareRunner->call(Object(React\Http\Io\ServerRequest), 3)
#5 /ppm/vendor/react/http/src/Middleware/RequestBodyParserMiddleware.php(34): React\Http\Io\MiddlewareRunner->React\Http\Io\{closure}(Object(React\Http\Io\ServerRequest))
#6 /ppm/vendor/react/http/src/Io/MiddlewareRunner.php(52): React\Http\Middleware\RequestBodyParserMiddleware->__invoke(Object(React\Http\Io\ServerRequest), Object(Closure))
#7 /ppm/vendor/react/http/src/Io/MiddlewareRunner.php(48): React\Http\Io\MiddlewareRunner->call(Object(React\Http\Io\ServerRequest), 2)
#8 /ppm/vendor/react/http/src/Middleware/RequestBodyBufferMiddleware.php(44): React\Http\Io\MiddlewareRunner->React\Http\Io\{closure}(Object(React\Http\Io\ServerRequest))
#9 /ppm/vendor/react/http/src/Io/MiddlewareRunner.php(52): React\Http\Middleware\RequestBodyBufferMiddleware->__invoke(Object(React\Http\Io\ServerRequest), Object(Closure))
#10 /ppm/vendor/react/http/src/Io/MiddlewareRunner.php(48): React\Http\Io\MiddlewareRunner->call(Object(React\Http\Io\ServerRequest), 1)
#11 /ppm/vendor/react/http/src/Middleware/LimitConcurrentRequestsMiddleware.php(91): React\Http\Io\MiddlewareRunner->React\Http\Io\{closure}(Object(React\Http\Io\ServerRequest))
#12 /ppm/vendor/react/http/src/Io/MiddlewareRunner.php(52): React\Http\Middleware\LimitConcurrentRequestsMiddleware->__invoke(Object(React\Http\Io\ServerRequest), Object(Closure))
#13 /ppm/vendor/react/http/src/Io/MiddlewareRunner.php(40): React\Http\Io\MiddlewareRunner->call(Object(React\Http\Io\ServerRequest), 0)
#14 /ppm/vendor/react/http/src/StreamingServer.php(236): React\Http\Io\MiddlewareRunner->__invoke(Object(React\Http\Io\ServerRequest))
#15 /ppm/vendor/react/http/src/StreamingServer.php(178): React\Http\StreamingServer->handleRequest(Object(React\Socket\Connection), Object(React\Http\Io\ServerRequest))
#16 /ppm/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(123): React\Http\StreamingServer->React\Http\{closure}(Object(React\Http\Io\ServerRequest), '')
#17 /ppm/vendor/react/http/src/Io/RequestHeaderParser.php(59): Evenement\EventEmitter->emit('headers', Array)
#18 /ppm/vendor/react/http/src/Io/RequestHeaderParser.php(47): React\Http\Io\RequestHeaderParser->parseAndEmitRequest(792)
#19 /ppm/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(123): React\Http\Io\RequestHeaderParser->feed('GET /dashboard/...')
#20 /ppm/vendor/react/stream/src/Util.php(71): Evenement\EventEmitter->emit('data', Array)
#21 /ppm/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(123): React\Stream\Util::React\Stream\{closure}('GET /dashboard/...')
#22 /ppm/vendor/react/stream/src/DuplexResourceStream.php(193): Evenement\EventEmitter->emit('data', Array)
#23 [internal function]: React\Stream\DuplexResourceStream->handleData(Resource id #2619, Object(React\EventLoop\StreamSelectLoop))
#24 /ppm/vendor/react/event-loop/src/StreamSelectLoop.php(236): call_user_func(Array, Resource id #2619, Object(React\EventLoop\StreamSelectLoop))