RoadRunner 是一个开源(MIT 许可)高性能 PHP 应用服务器、用 Go 编写的进程管理器,并由插件提供动力❤️。它支持作为服务运行,并且能够使用插件在每个项目的基础上扩展其功能。
RoadRunner具有一系列插件,包括HTTP(S)/2/3
与fCGI
PSR-7/PSR-17 标准兼容的服务器。这只是其众多功能之一。它是传统 Nginx+FPM 设置的有效替代方案,提供改进的性能和更大的灵活性。其广泛的插件选项远远超出了HTTP(S)/2/3
服务器的范围fCGI
,提供了广泛的功能:
- 队列驱动程序:RabbitMQ、Kafka、SQS、Beanstalk、NATS、内存中。
- KV 驱动程序:Redis、Memcached、BoltDB、内存中。
- OpenTelemetry 协议支持 (
gRPC
,http
,jaeger
)。 - 通过Temporal 的工作流引擎。
gRPC
服务器。为了提高速度,protobuf
可以使用扩展。HTTP(S)/2/3
fCGI
服务器具有自动 TLS 管理、103 Early Hints支持和中间件,例如:Static、Headers、gzip、prometheus(metrics)、send(x-sendfile)、OTEL、proxy_ip_parser 等。- 嵌入式分布式锁插件,用于管理对共享资源的访问。
- 指标服务器(您可以轻松公开自己的)。
- 通过Centrifugo服务器进行 WebSocket 和广播。
- 类似 Systemd 的服务管理器,具有自动重启、执行时间限制器等功能。
- 生产就绪。
- 还有更多😉
加入我们的不和谐服务器:链接
获取最新 RoadRunner 版本的最简单方法是使用预构建的发行二进制文件之一,该二进制文件适用于 OSX、Linux、FreeBSD 和 Windows。使用这些二进制文件的说明位于 GitHub发布页面。
要获取 Roadrunner 二进制文件,您可以使用我们的 docker 映像:(有关映像和标签的更多信息可以在此处ghcr.io/roadrunner-server/roadrunner:2023.X.X
找到)。
FROM ghcr.io/roadrunner-server/roadrunner:2023.X.X AS roadrunner FROM php:8.2-cliCOPY --from=roadrunner /usr/bin/rr /usr/local/bin/rr
# USE THE RR
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
配置位于.rr.yaml
文件中(完整示例):
您还可以使用 Composer 包附带的命令自动安装 RoadRunner,运行:
composer require spiral/roadrunner-cli ./vendor/bin/rr get-binary
服务器二进制文件将在项目的根目录中提供。
笔记
自动下载 RoadRunner 需要
php-curl
PHP扩展。需要安装php-zip
PHP 扩展才能运行 Roadrunner。php-sockets
检查php --modules
您安装的扩展。
wget https://github.com/roadrunner-server/roadrunner/releases/download/v2023.X.X/roadrunner-2023.X.X-linux-amd64.deb sudo dpkg -i roadrunner-2023.X.X-linux-amd64.deb
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/roadrunner-server/roadrunner/master/download-latest.sh | sh
使用Homebrew 的MacOS :
brew install roadrunner
配置可以位于.rr.yaml
文件(完整示例)中:
version: '3'rpc: listen: tcp://127.0.0.1:6001
server: command: "php worker.php"
http: address: "0.0.0.0:8080"
logs: level: error
rpc: listen: tcp://127.0.0.1:6001
server: command: "php worker.php"
http: address: "0.0.0.0:8080"
logs: level: error" tabindex="0" role="button">
请阅读文档了解更多内容。
<?phpuse Spiral<span class="pl-v">RoadRunner; use Nyholm<span class="pl-v">Psr7;
include "vendor/autoload.php";
$worker = RoadRunner<span class="pl-v">Worker::create(); $psrFactory = new Psr7<span class="pl-v">Factory<span class="pl-v">Psr17Factory();
$worker = new RoadRunner<span class="pl-v">Http<span class="pl-v">PSR7Worker($worker, $psrFactory, $psrFactory, $psrFactory);
while ($req = $worker->waitRequest()) { try { $rsp = new Psr7<span class="pl-v">Response(); $rsp->getBody()->write('Hello world!');
<span class="pl-s1"><span class="pl-c1">$</span>worker</span>-><span class="pl-en">respond</span>(<span class="pl-s1"><span class="pl-c1">$</span>rsp</span>); } <span class="pl-k">catch</span> (<span class="pl-smi"><span class="pl-smi">\<span class="pl-v">Throwable</span></span></span> <span class="pl-s1"><span class="pl-c1">$</span>e</span>) { <span class="pl-s1"><span class="pl-c1">$</span>worker</span>-><span class="pl-en">getWorker</span>()-><span class="pl-en">error</span>((<span class="pl-smi">string</span>)<span class="pl-s1"><span class="pl-c1">$</span>e</span>); }
}
$worker->respond($rsp);
} catch (\Throwable $e) {
$worker->getWorker()->error((string)$e);
}
}" tabindex="0" role="button">
重要的
如果您看到错误,请检查您是否已安装此步骤EOF
中的 PHP 软件包。如果这没有帮助,请尝试直接执行该命令并检查输出。php worker.php
可用插件:链接
运行应用程序服务器: