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 |
Release schedule
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
- Integrated metrics (Prometheus)
- Workflow engine by Temporal.io
- 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
- Included in Laravel Octane
- Automatic reloading on file changes
- Works on Windows (Unix sockets (AF_UNIX) supported on Windows 10)
Installation:
To get the roadrunner binary file you can use our docker image: spiralscout/roadrunner:2.X.X
(more information about
image and tags can be found here) or use the GitHub package: ghcr.io/roadrunner-server/roadrunner:2.7.7
FROM ghcr.io/roadrunner-server/roadrunner:2.7.7 AS roadrunner
FROM php:8.1-cli
COPY --from=roadrunner /usr/bin/rr /usr/local/bin/rr
# USE THE RR
$ composer require spiral/roadrunner:v2.0 nyholm/psr7
$ ./vendor/bin/rr get-binary
Configuration can be located in .rr.yaml
file (full sample):
rpc:
listen: tcp://127.0.0.1:6001
server:
command: "php worker.php"
http:
address: "0.0.0.0:8080"
logs:
level: error
Read more in Documentation.
Example Worker:
<?php
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);
}
}
Available Plugins:
Plugin |
Description |
Latest tag |
Go version |
|
Provides HTTP, HTTPS, FCGI transports. Extensible with middleware. |
|
|
|
HTTP middleware supports constant custom headers and CORS. |
|
|
|
HTTP middleware supports Accept-Encoding : GZIP. |
|
|
|
HTTP middleware serves static files. |
|
|
|
HTTP middleware handles X-Sendfile headers. |
|
|
|
HTTP middleware supports NewRelic distributed traces and custom attributes. |
|
|
|
HTTP middleware supports RFC7234 cache. |
|
|
|
Provides queues support for the RR2 via different drivers |
|
|
|
Provides AMQP (0-9-1) protocol support via RabbitMQ |
|
|
|
Provides beanstalkd queue support |
|
|
|
Provides support for the BoltDB key/value store. Used in the Jobs and KV |
|
|
|
SQS driver for the jobs |
|
|
|
NATS jobs driver |
|
|
|
Provides key-value support for the RR2 via different drivers |
|
|
|
Memcached driver for the kv |
|
|
|
Memory driver for the jobs, kv, broadcast |
|
|
|
Redis driver for the kv, broadcast |
|
|
|
Provides configuration parsing support to the all plugins |
|
|
|
Provides GRPC support |
|
|
|
Provides statistic grabbing capabilities (workers,jobs stat) |
|
|
|
Provides broadcasting capabilities to the RR2 via different drivers |
|
|
|
Central logger plugin. Implemented via Uber.zap logger, but supports other loggers. |
|
|
|
Provides support for the metrics via Prometheus |
|
|
|
Reloads workers on the file changes. Use only for the development |
|
|
|
Provides support for the ./rr reset command. Reloads workers pools |
|
|
|
Provides support for the RPC across all plugins. Collects RPC() interface{} methods and exposes them via RPC |
|
|
|
Provides support for the command. Prepare PHP processes |
|
|
|
Provides support for the external scripts, binaries which might be started like a service (behaves similar to the systemd services) |
|
|
|
Provides support for the health and readiness checks |
|
|
|
Provides support for the broadcasting events via websockets |
|
|
|
Provides support for the raw TCP payloads and TCP connections |
|
|
|
File server to handle static files |
|
|
Run:
To run application server:
$ ./rr serve
License:
The MIT License (MIT). Please see LICENSE
for more information. Maintained
by Spiral Scout.
Contributors
Thanks to all the people who already contributed!