24

A high-performance PHP app server, load balancer, and process manager

 5 years ago
source link: https://www.tuicool.com/articles/hit/YZzUnif
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

RoadRunner

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 compatible HTTP/HTTPS server and can be used to replace classic Nginx+FPM setup with much greater performance.

Table of Contents

Features:

  • 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)
  • fully customizable server
  • flexible environment configuration
  • no external PHP dependencies, drop-in (based on Goridge )
  • load balancer, process manager and task pipeline
  • frontend agnostic (queue, REST, PSR-7, async php, etc)
  • works over TCP, unix sockets and standard pipes
  • automatic worker replacement and safe PHP process destruction
  • worker lifecycle management (create/allocate/destroy timeouts)
  • payload context and body
  • control over max jobs per worker
  • protocol, worker and job level error management (including PHP errors)
  • memory leak failswitch
  • very fast (~250k rpc calls per second on Ryzen 1700X using 16 threads)
  • works on Windows

Example:

<?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:

http:
  address: 0.0.0.0:8080
  workers:
    command: "php psr-worker.php"
    pool:
      numWorkers: 4

License:

The MIT License (MIT). Please see LICENSE for more information. Maintained by SpiralScout .


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK