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
- 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)
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.X.X
- Docker:
FROM ghcr.io/roadrunner-server/roadrunner:2.X.X AS roadrunner
FROM php:8.1-cli
COPY --from=roadrunner /usr/bin/rr /usr/local/bin/rr
# USE THE RR
- CLI
$ composer require spiral/roadrunner:v2.0 nyholm/psr7
$ ./vendor/bin/rr get-binary
Configuration can be located in .rr.yaml
file (full sample):
version: '2.7'
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.
<?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);
}
}
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 |
To run application server:
$ ./rr serve
The MIT License (MIT). Please see LICENSE
for more information. Maintained
by Spiral Scout.
Thanks to all the people who already contributed!