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.
Official Website | Documentation
- production-ready
- 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)
- fully customizable server
- 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)
- very fast (~250k rpc calls per second on Ryzen 1700X using 16 threads)
- integrations with Symfony, Laravel, Slim, CakePHP, Zend Expressive, Spiral
- works on Windows
To install:
$ composer require spiral/roadrunner
$ ./vendor/bin/rr get-binary
<?php
// worker.php
ini_set('display_errors', 'stderr');
include "vendor/autoload.php";
$relay = new Spiral\Goridge\StreamRelay(STDIN, STDOUT);
$psr7 = new Spiral\RoadRunner\PSR7Client(new Spiral\RoadRunner\Worker($relay));
while ($req = $psr7->acceptRequest()) {
try {
$resp = new \Zend\Diactoros\Response();
$resp->getBody()->write("hello world");
$psr7->respond($resp);
} catch (\Throwable $e) {
$psr7->getWorker()->error((string)$e);
}
}
Configuration can be located in .rr.yaml
file (full sample):
http:
address: 0.0.0.0:8080
workers.command: "php worker.php"
Read more in Wiki.
To run application server:
$ ./rr serve -v -d
The MIT License (MIT). Please see LICENSE
for more information. Maintained by Spiral Scout.