在 Aerys 上使用 PPM

Usage PPM on top of Aerys

有"Don’t use any blocking I/O functions in Aerys." 在 https://amphp.org/aerys/io#blocking-io 处发出警告。如果我需要使用 PDO(例如 Prooph 组件)并想重用已初始化的应用程序实例来处理不同的请求,我应该使用 PPM 而不是 Aerys 吗?

我没有绑定到任何现有的 PPM 适配器(例如 Symfony)。在 Aerys (https://github.com/php-pm/php-pm/pull/267) 之上使用 PPM 时,有没有办法重用 Aerys 代码(例如路由器)来实现请求-响应逻辑?

如果您想使用阻塞功能,您可以使用 -w 开关增加工作人员数量,使命令行脚本更高。这绝对不是最佳选择,但如果有足够多的工作人员,阻塞应该不会太明显,除了可能会增加延迟。

另一种可能性是使用 amphp/parallel.

将阻塞调用移动到一个或多个工作线程中

只要反应比较快就没问题。如果有很多负载并且事情变得更慢并且可能超时,问题就会出现,因为这些都是非常长的块。

PHP-PM 与直接使用 Aerys 相比并没有太多优势。它将请求重定向到一个当前空闲的 worker,但是如果负载足够高,内核负载平衡可能就足够好了,并不是所有需要更长时间的请求都会被路由到一个 worker。事实上,使用 Aerys 可能会更好,因为它是生产就绪的,并且有多个独立的 worker 而不是一个可能成为瓶颈的 master。 PHP-PM 可以用更好的方式解决这个问题,但目前还没有实现。此外,Aerys 支持保持活动连接,PHP-PM 目前不支持。