编程

AmPHP 简介

2682 2022-11-10 16:20:25

引领 PHP 进入异步编程世界

Amp 是一个事件驱动的 PHP 并发框架, 让你可以通过事件循环和 promise 管理相互协作的多个任务。

事件驱动需要不同的思维方式,因此 Amp 使用异步式 API 来实现过渡

有许多包允许你使用非阻塞 I/O、利用长时间运行的进程来创建新应用,也可以将 Amp 集成到现有的应用中,以实现并发数据访问。

try {
    $request = new Request("https://amphp.org/");
    $response = yield  $http->request($request);

    if ($response->getStatus() !== 200) {
         throw new HttpException;
    }
} catch (HttpException $e)  {
    // handle error
}

异步结果的消费,传统上是通过回调解决。 Promise 将回调从参数转移到返回值中。

Amp 使用 PHP 生成器(Generator) 实现协程,以避免回调或者 then() 地狱。Promise 消费不带回调的结果,像异步代码一样允许普通的 catch 条款处理错误。

事件循环 Event Loop

事件循环是每个异步应用的最主要任务调度器。一旦注册的事件发生就发送关联的 handlers。

Promises

Promise 是异步执行结果的占位符。异步程序阻塞直到结果可用,异步程序会先返回一个占位符,在稍后获得结果后填充进去。

协程 Coroutines

协程是可以暂停或恢复的可中断函数。 Amp 使用 Generator 使结果的消费不必使用回调。

迭代器 Iterators

异步迭代器允许值集合的消费,一次消费一个值。而不用等到所有结果都返回了才一次性解决。迭代器使得集合中项目的尽快消费变得可能。

Streams

Amp 提供了流的抽象,使得用非阻塞 I/O 更加容易。不必再担心读写的监听、buffering 和反压。

应用场景

Amp 可用于任何你需要等待多路 I/O 活动且不需要这些活动以特定顺序执行的场景。它可用于所有 SAPI, 从 Apache 和 PHP-FPM 到 PHP-CLI  。如果你没有长时运行的应用, Amp\Promise\Wait() 可能对你有用

  • 多路复用 I/O

非阻塞 I/O 的主要用处是多路复用。多路 I/O 请求可以并发执行。事件循环等待任何一路 I/O 事件执行,而不必只是等待某一路 I/O 执行。这就使得多路 HTTP 请求,SQL 查询或任何其他I/O 相关操作变得可行。

  • 监听 I/O

或许你对使用并发I/O 提升应用速度不太感兴趣, 只是想写个守护唤醒CPU,使之在某些 I/O 事件发生时,对该事件做相应的反应?Amp 的事件循环提供了这个功能,让你注册回调以对I/O事件有所反应。

兼容包

Amphp 提供了一系列高质量的包,从基础的网络组件到更高级的组件如 HTTP 应用服务器。所有的兼容包在 Github 使用了 amphp 标签。有许多包在我们专有的页面中展示了。

Amp 也能兼容所有的ReactPHP的库

安装

composer require amphp/amp