繁体   English   中英

amphp如何工作

[英]How does amphp work

他们网站http://amphp.org/faq上的文档对我来说不是很清楚。 事情让我感到困惑。 它是否打算作为服务器运行? 或以CLI身份运行? 或者在web容器中运行(apache,nginx fpm)? 并且php本质上是同步的,如果没有某种扩展(如pthread)的支持,它怎么可能是异步的。

编辑---

放大器的潜在应用:后台线程? 在一个简单的用例中,用户提交订单,php可以随着时间来处理订单。 所以我们想要使用线程(比如Java servlet一直这样做),而不是让用户等待。 我们知道它可以用cron-job或者附加-ajax来完成,但它很难看,我们有很多这种异步要求

Amp使用非阻塞I / O来实现并发。 PHP通过http://php.net/stream_set_blocking对其进行原生支持。

Amp可以在CLI应用程序中使用,但也可以在其他SAPI中使用,例如在Apache中,以对某些服务发出多个并发请求。 如果要将async嵌入到其他同步应用程序中,可以使用Amp\\Promise\\wait

$uris = ["https://google.com/", "https://github.com/"];
$client = new Amp\Artax\BasicClient;

$promises = array_map(function ($uri) use ($client) {
    return $client->request($uri);
}, $uris)

$responses = Amp\Promise\wait(Amp\Promise\all($promises));

Amp通常是单线程的。 如果您使用像amphp/parallel这样的东西,它只是多线程的。 amphp/parallel可以使用pthreads或多个进程并行执行多个阻塞事物。

如果您有更具体的问题,只需编辑您的问题和评论,我会尝试回答它们。


关于背景处理,是的,这可能与amphp/parallel ,但原始过程必须保持活着。 您可以在amphp/process实现一个disown机制, amphp/process在父进程死亡时保持进程运行,然后它也可以在Apache或PHP-FPM中运行。

但我通常建议为这样的任务建立队列,因为队列可以重新启动失败的任务(如果工作人员崩溃),如果有很多后台作业,则不会导致极高的负载,因为不是全部将立即开始,但当工人有时间时,将在后台处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM