2021年6月8日12:51:06
Workers
为了运行您的 PHP 应用程序,您必须创建一个工作端点并配置 RoadRunner 以使用它。首先,使用Composer安装所需的包。
composer require spiral/roadrunner nyholm/psr7
使用 PSR-7 服务器 API 的最简单入口点可能如下所示:
<?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);
}
}
这样Workers将期望通过标准管道与父 RoadRunner 服务器进行通信,创建.rr.yaml
配置以启用它:
server:
command: "php psr-worker.php"
http:
address: 0.0.0.0:8080
pool:
num_workers: 4
如果您不喜欢yaml
尝试.rr.json
:
{
"server": {
"command": "path-to-php/php psr-worker.php"
},
"http": {
"address": "0.0.0.0:8080",
"pool": {
"num_workers": 4
}
}
}
您现在可以通过下载 RR 二进制文件并运行来启动应用程序 rr serve
替代沟通方式
PHP Workers 将利用标准管道 STDOUT 和 STDERR 与 RR 服务器交换数据帧。在某些情况下,您可能希望使用替代通信方法,例如 TCP 套接字:
server:
command: "php psr-worker.php"
relay: "tcp://localhost:7000"
http:
address: 0.0.0.0:8080
pool:
num_workers: 4
Unix 套接字:
server:
command: "php psr-worker.php"
relay: "unix://rr.sock"
http:
address: 0.0.0.0:8080
pool:
num_workers: 4
故障排除
在某些情况下,RR 将无法处理 PHP worker 产生的错误(PHP 丢失、脚本死机等)。
$ rr serve
DEBU[0003] [rpc]: started
DEBU[0003] [http]: started
ERRO[0003] [http]: unable to connect to worker: unexpected response, header is missing: exit status 1
DEBU[0003] [rpc]: stopped
您可以通过手动调用command
set in .rr
file来解决它:
$ php psr-worker.php
在提供任何输入之前,工作人员不应导致任何错误,并且必须在第一个输入字符后以无效输入签名失败。
其他类型的Workers
不同的roadrunner 实现可能会定义自己的worker API,例如:GRPC、Workflow/Activity Worker。
环境配置
所有 RoadRunner 工作人员都将继承可用于父服务器进程的系统配置。此外,你可以自定义设置ENV变量传递到使用部分你的工人env
的.rr
配置文件。
server:
command: "php worker.php"
env:
key: value
所有键都将自动大写!
默认 ENV 值
RoadRunner 提供了一组 ENV 值来帮助 PHP 进程识别如何与服务器正确通信。
钥匙 | 描述 |
---|---|
RR_MODE | 确定工作模式应该使用的模式(“http”,“temporal”) |
RR_RPC | 启用时包含 RPC 连接地址。 |
RR_RELAY | “管道”或“tcp://...”,取决于服务器中继配置。 |
11111