使用 AMPHP 框架编写非阻塞异步 PHP 代码,依赖 revolt/event-loop、amphp/amp ^3 及完整 amphp/* 生态(http‑server、http‑client 等)。
AMPHP v3 技能是一项面向实际任务的技能,主要用于Version;此技能只覆盖 AMPHP v3 —— ampp/amp ^3, 起义/ event- loop ^1, PHP 8. 1+. 如果您看到 v2 模式( 生成 $promise, AmpLoop: run(), promise, Corotine ) , 处理。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
本技能仅覆盖 AMPHP v3 —— 即 amphp/amp ^3、revolt/event-loop ^1,要求 PHP 8.1+。
若见到 v2 风格的写法(如 yield $promise、AmpLoop::run()、Promise、Coroutine),一律视为错误,须改用 v3 对应的等效实现。完整的迁移对照表请参阅 docs/v2-v3.md。
以下规则适用于你在 AMPHP 项目中编写或修改的每一个文件:
declare(strict_types=1)。json_encode / json_decode 时,必须传入 JSON_THROW_ON_ERROR 标志。file_get_contents、PDO、curl_exec、sleep)—— 应改用 amphp/file、amphp/mysql、amphp/http-client、Ampdelay() 等提供的异步替代方案。finally 块中释放;否则异常会跳过清理逻辑。buffer() 或完整迭代读取完毕——未读取的响应体会导致连接无法复用。关于 19+ 个已文档化的典型陷阱(如缓冲区死锁、Channel EOF 行为、箭头函数变量捕获、Redis 工厂模式 vs 构造函数调用等),请在编写任何异步代码前通读 docs/common-mistakes.md。
仅按需加载与当前任务相关的文件,切勿一次性加载全部文件。
| 文件 | 适用场景 |
|---|---|
docs/constructors.md |
实例化任意 AMPHP 类时 —— 经验证的构造函数签名、参数名、默认值及工厂方法 |
docs/namespaces.md |
编写 use 导入语句时 —— 所有类、函数与枚举的完整命名空间路径 |
docs/packages.md |
新建项目或引入新依赖时 —— composer require 命令及各包功能概览 |
docs/common-mistakes.md |
编写任何异步代码前 —— 19+ 个真实 Bug 案例,含错误写法与正确写法对比 |
docs/v2-v3.md |
从 AMPHP v2 迁移,或遇到含 yield/Promise/Coroutine 的旧代码时 |
| 文件 | 适用场景 |
|---|---|
examples/core-async.md |
EventLoop 启动、async()、delay()、Future 组合器(await、awaitAll、awaitAny)、DeferredFuture |
examples/cancellation.md |
TimeoutCancellation、DeferredCancellation、CompositeCancellation、取消传播机制 |
examples/sync.md |
LocalMutex、LocalSemaphore、LocalParcel、Barrier、LocalKeyedMutex、RateLimitingSemaphore、synchronized() |
examples/http-server.md |
最小化 HTTP 服务器、带路由参数的 Router、中间件栈、TLS、Session、静态文件服务、代理配置 |
examples/http-client.md |
GET/POST 请求、并行请求、ConnectionLimitingPool、拦截器(interceptor)、代理、响应体流式读取 |
examples/websocket.md |
Echo 服务器、仅推送模式(drain 模式)、广播网关、WebSocket 客户端、二进制消息流式传输 |
examples/byte-stream.md |
ReadableBuffer、pipe()、GZIP 压缩/解压缩、Base64 编码/解码、splitLines() |
examples/pipelines.md |
Queue 的背压控制、Pipeline 操作符(map、filter、tap)、concurrent()、merge()、concat() |
examples/parallel.md |
Task 接口、基于工作池的扇出(fan-out)、IPC Channel 进度上报、ChannelException 处理 |
examples/database.md |
MySQL 连接池、事务、预处理语句;Redis 的 get/set/hash/pubsub/cache 操作 |
examples/file-io.md |
File::read/write/exists/getSize/openFile/listFiles/deleteDirectory/createDirectoryRecursively |
examples/cache.md |
LocalCache(LRU + TTL)、AtomicCache(compute-if-absent)、PrefixCache、NullCache |
examples/interval.md |
Interval 重复定时器、enable/disable 控制、weakClosure() 防止 GC 循环引用、EventLoop::delay/repeat/cancel |
examples/testing.md |
AsyncTestCase、构建模拟 Request 对象、LeagueUriHttp::new()、phpunit CLI 参数 |
| 文件 | 适用场景 |
|---|---|
workflows/http-server-full.md |
从零构建完整 HTTP 服务器:Router + 中间件 + 静态文件 + WebSocket + 优雅关闭 |
workflows/parallel-fan-out.md |
CPU 密集型任务分发至多个工作进程,通过 IPC 上报执行进度 |
workflows/tcp-server.md |
原生 TCP 服务器:Echo 服务、自定义二进制协议、TLS 双向认证、优雅关闭 |
| 文件 | 适用场景 |
|---|---|
templates/http-server.php |
开箱即用的完整 HTTP 服务器样板(含 Router + 中间件 + 静态文件 + 优雅关闭) |
templates/websocket-handler.php |
WebSocket 处理器样板:Echo、仅推送、广播网关 |
templates/parallel-task.php |
带 IPC 进度上报与扇出编排能力的工作进程 Task 类样板 |
| 文件 | 用法 |
|---|---|
scripts/server-demo.php |
php scripts/server-demo.php [--port=N] — 启动一个最小 HTTP 服务器以验证环境配置 |
scripts/http-client-demo.php |
php scripts/http-client-demo.php [url] — 演示 GET 请求、并行请求、ConnectionLimitingPool 使用 |
| 文件 | 适用场景 |
|---|---|
resources/blocking-vs-async.md |
速查表:将常见阻塞式 PHP 函数一一映射至其 AMPHP v3 异步替代方案 |
| 文件 | 内容说明 |
|---|---|
references/advanced-patterns.md |
深度解析:Fiber 模型底层机制、所有 Future 组合器、Queue 背压原理、Pipeline 并发模型、取消语义、EventLoop 定时器细节 |
references/class-examples.md |
按包组织的关键 AMPHP 类的最小使用示例,每类一个 |