RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager.
It supports running as a service with the ability to extend its functionality on a per-project basis.
RoadRunner includes PSR-7/PSR-17 compatible HTTP and HTTP/2 server and can be used to replace classic Nginx+FPM setup
with much greater performance and flexibility.
Features:
Production-ready
PCI DSS compliant
PSR-7 HTTP server (file uploads, error handling, static files, hot reload, middlewares, event listeners)
HTTPS and HTTP/2 support (including HTTP/2 Push, H2C)
A Fully customizable server, FastCGI support
Flexible environment configuration
No external PHP dependencies (64bit version required), drop-in (based on Goridge)
Load balancer, process manager and task pipeline
Frontend agnostic (Queue, PSR-7, GRPC, etc)
Integrated metrics (Prometheus)
Works over TCP, UNIX sockets and standard pipes
Automatic worker replacement and safe PHP process destruction
Worker create/allocate/destroy timeouts
Max jobs per worker
Worker lifecycle management (controller)
maxMemory (graceful stop)
TTL (graceful stop)
idleTTL (graceful stop)
execTTL (brute, max_execution_time)
Payload context and body
Protocol, worker and job level error management (including PHP errors)
Development Mode
Integrations with Symfony, Laravel, Slim, CakePHP, Zend Expressive
Application server for Spiral
Automatic reloading on file changes
Works on Windows (Unix sockets (AF_UNIX) supported on Windows 10)
Installation:
$composer require spiral/roadrunner:v2.0 nyholm/psr7
$./vendor/bin/rr get-binary
For getting roadrunner binary file you can use our docker image: spiralscout/roadrunner:X.X.X (more information about
image and tags can be found here)
Configuration can be located in .rr.yaml
file (full sample):
rpc:
listen: tcp://127.0.0.1:6001
server:
command: "phpworker.php"
http:
address: "0.0.0.0:8080"
logs:
level: error
Read more in Documentation.
Example Worker:
use Spiral\RoadRunner;
use Nyholm\Psr7;
include "vendor/autoload.php";
$worker = RoadRunner\Worker::create();
$psrFactory = new Psr7\Factory\Psr17Factory();
$worker = new RoadRunner\Http\PSR7Worker($worker, $psrFactory, $psrFactory, $psrFactory);
while ($req = $worker->waitRequest()) {
try {
$rsp = new Psr7\Response();
$rsp->getBody()->write('Hello world!');
$worker->respond($rsp);
} catch (\Throwable $e) {
$worker->getWorker()->error((string)$e);
}
}
Run:
To run application server:
$ ./rr serve
License:
The MIT License (MIT). Please see LICENSE for more information. Maintained
by Spiral Scout.