roadrunner中文文档(二)PHP Workers
发布日期:2021-06-29 04:20:34 浏览次数:2 分类:技术文章

本文共 4658 字,大约阅读时间需要 15 分钟。

2021年6月8日12:51:06

Workers

为了运行您的 PHP 应用程序,您必须创建一个工作端点并配置 RoadRunner 以使用它。首先,使用安装所需的包。

composer require spiral/roadrunner nyholm/psr7

使用 PSR-7 服务器 API 的最简单入口点可能如下所示:

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 serveDEBU[0003] [rpc]: startedDEBU[0003] [http]: startedERRO[0003] [http]: unable to connect to worker: unexpected response, header is missing: exit status 1DEBU[0003] [rpc]: stopped

您可以通过手动调用command set in .rrfile来解决它:

$ php psr-worker.php

在提供任何输入之前,工作人员不应导致任何错误,并且必须在第一个输入字符后以无效输入签名失败。

其他类型的Workers

不同的roadrunner 实现可能会定义自己的worker API,例如:、。

环境配置

所有 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://...”,取决于服务器中继配置。

开发者模式

RoadRunner 在守护进程模式下使用 PHP 脚本,这意味着每次更改代码库时都必须重新加载服务器。

如果您使用任何现代 IDE,您可以通过添加文件观察器来实现这一点,该观察器自动rr resetreload配置中指定的插件调用命令。

或者使用。

在 Docker 中

您可以通过使用本地 rr 客户端连接到 docker 来重置 rr 进程。

rpc:  listen: tcp://:6001

确保转发/公开端口 6001。

然后在rr reset本地运行文件更改。

调试模式

在调试模式下运行工作程序(类似于 PHP-FPM 的操作方式):

http:  pool.debug: true

错误处理

有多种方法可以处理 PHP 工作人员产生的错误。

最简单和最常见的方法是使用以下错误消息响应父服务getWorker()->error()

try {    $resp = new \Zend\Diactoros\Response();    $resp->getBody()->write("hello world");    $psr7->respond($resp);} catch (\Throwable $e) {    $psr7->getWorker()->error((string)$e);}

您还可以刷新警告和错误,STDERR以将它们直接输出到控制台(类似于 docker-compose)。

file_put_contents('php://stderr', 'my message');

自 RoadRunner 2.0 起,所有发送到 STDOUT 的警告也将转发到 STDERR。

重新启动Workers

RoadRunner 提供了多种方法来按需安全地重新启动Workers。这两种方法都可以在实时服务器上使用,并且不会导致停机。

停止命令

您可以将stop命令从工人发送到父服务器以强制进程销毁。在这种情况下,作业/请求将自动转发给下一个工作人员。

我们可以通过max_jobs在PHP端实现控制来演示:

waitRequest()) { try { $rsp = new Psr7\Response(); $rsp->getBody()->write('Hello world!'); $count++; if ($count > 10) { $worker->getWorker()->stop(); return; } $worker->respond($rsp); } catch (\Throwable $e) { $worker->getWorker()->error((string)$e); } }

这种方法可用于控制 PHP 脚本内的内存使用。

完全重置

您还可以使用嵌入式启动所有 RoadRunner 工作器的重建:

$rpc = \Spiral\Goridge\RPC\RPC::create('tcp://127.0.0.1:6001');$rpc->call('resetter.Reset', 'http');

嵌入式监控

RoadRunner 能够监控您的应用程序并在必要时运行软重置(在请求之间)。以前的名字 - limit,现在的 -supervisor

配置

编辑您的.rr文件以指定应用程序的限制:

# monitors rr server(s)http:  address: "0.0.0.0:8080"  pool: num_workers: 6 supervisor: # watch_tick defines how often to check the state of the workers (seconds) watch_tick: 1s # ttl defines maximum time worker is allowed to live (seconds) ttl: 0 # idle_ttl defines maximum duration worker can spend in idle mode after first use. Disabled when 0 (seconds) idle_ttl: 10s # exec_ttl defines maximum lifetime per job (seconds) exec_ttl: 10s # max_worker_memory limits memory usage per worker (MB) max_worker_memory: 100

RPC 到应用服务器

您可以通过SocketRelay以下方式连接到应用服务器:

$rpc = \Spiral\Goridge\RPC\RPC::create('tcp://127.0.0.1:6001');

您可以立即使用此 RPC 调用嵌入式 RPC 服务,例如 HTTP:

var_dump($rpc->call('informer.Workers', 'http'));

请注意,在调试模式(http: { debug: true }in .rr.yaml)下运行工作人员的情况下,http工作人员的数量将为零([]即将返回一个空数组)。

此行为将来可能会更改,您不应依赖此结果来检查 RoadRunner 是否以开发模式启动。

您可以在阅读如何创建自己的服务和 RPC 方法。

注意事项

上传文件

由于文件上传是在 RR 端处理的,所以 PHP 进程只会接收临时资源的文件名。此资源不会在uploaded files哈希中注册,因此,函数is_uploaded_file将始终返回false

参考: : 

退出和模具功能

请注意,你不应该使用下列任何一种方法的dieexit。如果您的库需要将内容写入标准输出,请使用缓冲输出。

缓存

在带有 WinCache 扩展的 Windows 上使用 roadrunner 可能会导致工作字节码卡在内存中。

调试

您可以将 RoadRunner 脚本与 xDebug 扩展一起使用。为了启用配置您的 IDE 以接受远程连接。

请注意,如果您运行多个 PHP 进程,您必须将允许的最大连接数扩展到活动工作器的数量,否则某些调用将不会在您的断点上被捕获。

调试

要激活 xDebug,请确保xdebug.mode=debug在您的php.ini.

要在您的应用程序中启用 xDebug,请确保设置 ENV 变量XDEBUG_SESSION

rpc:   listen: tcp://127.0.0.1:6001server:   command: "php worker.php"   env:      XDEBUG_SESSION: 1http:   address: "0.0.0.0:8080"   pool:      num_workers: 1      debug: true

此时您应该能够使用断点和查看状态。

 

转载地址:https://blog.csdn.net/zh7314/article/details/117726100 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:roadrunner中文文档(四)app服务器
下一篇:Laravel Octane中文文档

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月29日 00时36分41秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章