- 后端
- 微服务
【免费下载链接】hyperf
🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.
Hyperf 是一个面向高性能与灵活性的协程框架,其核心价值之一在于生态中大量经过协程化改造、可在常驻内存协程环境下安全使用的组件库。本文基于仓库官方文档 docs/en/awesome-components.md 的组件清单,逐一解读路由、事件、日志、命令、数据库、服务治理等领域的官方组件与社区组件,并结合 hyperf/hyperf 仓库源码佐证其协程安全设计,同时完整给出组件提交流程与 Hyperf 组件适配指南。读完本文,你将能够快速为业务场景挑选合适的协程组件,并掌握将第三方库或自研组件适配进 Hyperf 生态的标准路径。
一、为什么要有一份"协程安全"组件清单
在传统 PHP-FPM 架构下,引入第三方库通常只需通过 Composer 直接安装即可。但在 Hyperf 这类常驻内存 + 协程的架构下,应用的生命周期与执行模式发生了根本变化:进程常驻意味着静态变量、全局状态会被复用,协程并发则意味着阻塞式 IO 调用会拖垮整个 Worker 进程。因此,并非所有 Library 都能在 Hyperf 中直接使用,只有经过协程化处理(例如将阻塞 IO 替换为协程调度、隔离协程上下文)的组件才是安全的。
官方文档 docs/en/awesome-components.md 开篇即明确:
所有官方提供的组件库均已协程化处理,可安全地在 Hyperf 或其他协程框架中使用;基于 Hyperf 的开放性与可扩展性,社区可以开发或适配各类组件,使 Hyperf 拥有无限可能。
这份页面收录了两类内容:
- Hyperf 兼容的协程组件:由 Hyperf 官方提供或社区适配、已验证可在协程下安全使用的组件;
- 常用的协程安全库:可直接在协程环境中放心引入的常用类库。
它是开发者快速选型的官方索引,也是社区生态的入口页。
二、组件全景:按领域分类的官方与社区组件清单
以下完整继承原文档的组件清单,并按原文档分类组织。对于仓库内已收录的官方组件,同时给出对应的仓库源码路径,便于深入阅读实现。
1. 路由(Route)
| 组件 | 说明 |
|---|---|
| nikic/fastroute | 常用的高性能路由组件 |
| lazychanger/urlrewrite | 基于 PSR-7、采用与 nikic/fastroute 相同路由规则的 URL 重写工具 |
路由是 Web 应用的入口分发层。Hyperf 的 HTTP 服务基于 http-server 实现,其路由分发对性能敏感,选用经过验证的高性能路由组件是保证服务吞吐的基础。
2. 事件(Event)
| 组件 | 说明 |
|---|---|
| hyperf/event | Hyperf 官方提供的基于 PSR-14 的事件管理器 |
在仓库中对应 src/event。其 composer.json 声明了对psr/event-dispatcher: ^1.0的依赖,并以Hyperf\Event\ConfigProvider作为组件配置入口;ConfigProvider.php 将 PSR 标准的ListenerProviderInterface与EventDispatcherInterface绑定到 Hyperf 的工厂实现,从而让事件系统无缝融入依赖注入容器。
3. 日志(Log)
| 组件 | 说明 |
|---|---|
| hyperf/logger | Hyperf 官方提供的基于 PSR-3 的日志管理器 |
对应仓库 src/logger。其 composer.json 依赖monolog/monolog: ^3.1与psr/log: ^2.0 || ^3.0,说明它是在 Monolog 之上、以 PSR-3 标准接口对外提供协程安全的日志能力。
4. 命令行(Command)
| 组件 | 说明 |
|---|---|
| hyperf/command | Hyperf 官方提供的基于 symfony/console 扩展并支持注解的命令管理组件 |
| symfony/console | Symfony 提供的独立命令管理组件 |
对应仓库 src/command。其 composer.json 声明依赖symfony/console: ^6.0 || ^7.0,同时依赖hyperf/di(注解支持)与psr/event-dispatcher(监听器支持),从依赖关系即可确认:Hyperf 命令组件 = Symfony Console 的协程化 + 注解式命令声明能力。
5. 数据库(Database)
| 组件 | 说明 |
|---|---|
| hyperf/database | 基于 Hyperf fork 的 Eloquent 数据库 ORM,可复用于其他框架 |
| hyperf/model-cache | 基于 hyperf/database 的模型自动缓存组件,Hyperf 官方提供 |
对应仓库 src/database 与 src/model-cache。database/composer.json 显示其依赖hyperf/engine: ^2.0(底层协程引擎)、nesbot/carbon、psr/event-dispatcher等,并建议搭配hyperf/paginator进行结果集分页——这是 ORM 组件可独立复用到其他框架的依赖设计。
6. 依赖注入容器(Dependency Injection Container)
| 组件 | 说明 |
|---|---|
| hyperf/di | Hyperf 官方提供的依赖注入容器,支持注解与 AOP |
对应仓库 src/di。di/composer.json 的依赖揭示了其实现底座:nikic/php-parser: ^5.6(注解扫描解析)、hyperf/code-parser(代码解析)、php-di/phpdoc-reader(PHPDoc 读取)、symfony/finder(扫描路径遍历)。DI 是 Hyperf 注解机制与 AOP 的基石,几乎所有官方组件都通过 ConfigProvider 机制向容器注册依赖(如前述 hyperf/event 的依赖注册方式)。
7. 服务端(Server)
| 组件 | 说明 |
|---|---|
| hyperf/http-server | Hyperf 官方提供的 HTTP 服务端 |
| hyperf/grpc-server | Hyperf 官方提供的 gRPC 服务端 |
| hyperf/websocket-server | Hyperf 官方提供的 WebSocket 服务端 |
| hyperf/rpc-server | Hyperf 官方提供的抽象 RPC 服务端 |
对应仓库 src/http-server、src/grpc-server、src/websocket-server、src/rpc-server。这一组组件覆盖了 Hyperf 对外提供服务的全部协议形态:HTTP、gRPC、WebSocket 以及面向自定义协议的抽象 RPC。
8. 客户端(Client)
| 组件 | 说明 |
|---|---|
| hyperf/consul | Hyperf 官方提供的 Consul 协程客户端 |
| hyperf/elasticsearch | Hyperf 官方提供的 Elasticsearch 协程客户端 |
| hyperf/grpc-client | Hyperf 官方提供的 gRPC 协程客户端 |
| hyperf/rpc-client | Hyperf 官方提供的抽象 RPC 协程客户端 |
| hyperf/guzzle | Hyperf 官方提供的 Guzzle HTTP 协程客户端 |
| hyperf/redis | Hyperf 官方提供的 Redis 协程客户端 |
| hyperf/websocket-client | Hyperf 官方提供的 WebSocket 协程客户端 |
| hyperf/cache | Hyperf 官方提供的基于 PSR-16 的缓存协程客户端 |
| friendsofhyperf/http-client | 基于 Hyperf 的 Guzzle HTTP 协程客户端 |
| friendsofhyperf/openai-client | 基于 Hyperf 的 OpenAI 协程客户端 |
以 src/guzzle 为例,可以直观看到"协程化"在源码层面的落地方式:
- ClientFactory.php 在
Coroutine::inCoroutine()为真时,自动为 Guzzle 装配CoroutineHandler; - CoroutineHandler.php 的类注释明确写道:Http handler that uses Swoole/Swow Coroutine as a transport layer,即用协程作为传输层;
- PoolHandler.php 进一步继承协程 Handler 并接入连接池能力(对应
suggest中的hyperf/pool)。
从源码结构看,Hyperf 官方客户端组件的协程化普遍采用"检测当前是否处于协程环境 → 切换协程 Handler / 复用连接池"的策略,这正是它们能在协程下安全使用的原因。
9. 测试(Testing)
| 组件 | 说明 |
|---|---|
| hyperf/testing | Hyperf 官方单元测试组件 |
| friendsofhyperf/pest-plugin-hyperf | 专为 Hyperf 设计的 Pest 插件,为 Pest 提供协程环境支持 |
对应仓库 src/testing。其 composer.json 依赖phpunit/phpunit: ^11.0,并在bin段提供co-phpunit可执行文件,这是面向协程环境的 PHPUnit 入口;同时依赖hyperf/http-server、hyperf/http-message以便在测试中直接发起协程化 HTTP 请求。
10. 消息队列(Message Queue)
| 组件 | 说明 |
|---|---|
| hyperf/amqp | Hyperf 官方提供的 AMQP 协程组件 |
| hyperf/async-queue | Hyperf 官方提供的基于 Redis 的异步队列组件 |
对应仓库 src/amqp 与 src/async-queue。AMQP 覆盖 RabbitMQ 等标准消息协议,async-queue 则利用 Redis 实现轻量异步任务,二者分别面向不同的消息投递场景。
11. 配置中心(Configuration Center)
| 组件 | 说明 |
|---|---|
| hyperf/config-apollo | Hyperf 官方提供的 Apollo 配置中心组件 |
| hyperf/config-aliyun-acm | Hyperf 官方提供的阿里云 ACM 应用配置服务组件 |
对应仓库 src/config-apollo 与 src/config-aliyun-acm。配置中心组件负责将远程配置动态同步进 Hyperf 的 config 体系,实现配置热更新。
12. 服务治理(Service Governance)
| 组件 | 说明 |
|---|---|
| hyperf/json-rpc | Hyperf 官方提供的 JSON-RPC 协议组件 |
| hyperf/rate-limit | Hyperf 官方提供的基于令牌桶算法的限流器组件 |
| hyperf/load-balancer | Hyperf 官方提供的负载均衡组件 |
| hyperf/service-governance | Hyperf 官方提供的服务治理组件 |
| hyperf/tracer | Hyperf 官方提供的 OpenTracing 组件 |
| hyperf/circuit-breaker | Hyperf 官方提供的服务熔断组件 |
| friendsofhyperf/sentry | 基于 Hyperf 的 Sentry 组件 |
对应仓库 src/json-rpc、src/rate-limit、src/load-balancer、src/service-governance、src/tracer、src/circuit-breaker。这组组件构成了一套完整的微服务治理栈:限流、负载均衡、服务注册发现、链路追踪与熔断降级,配合 服务注册 文档即可搭建生产级微服务。
13. 注解配置(Annotation Configuration)
| 组件 | 说明 |
|---|---|
| hyperf-helper/dependency | 使用注解快速配置依赖,并支持依赖优先级 |
14. DTO
| 组件 | 说明 |
|---|---|
| fatbit/form-request-param | 基于 DTO 的强类型请求参数校验(表单校验)与自动注入组件 |
15. 开发与调试(Development and Debugging)
| 组件 | 说明 |
|---|---|
| firstphp/wsdebug | 通过 WebSocket 实时观测异常错误的开发调试组件 |
| qbhy/hyperf-multi-env | 支持类似 Laravel 的多环境配置文件功能,例如APP_ENV=testing时加载.env.testing覆盖默认.env |
| qiutuleng/hyperf-dump-server | 基于 Symfony 的 Var-Dump Server 组件,提供dump函数将程序中的变量或数据打印到另一个命令行窗口 |
| learv in/hyperf-tinker | 基于 PsySH 提供交互式 Hyperf Shell 容器 |
| friendsofhyperf/telescope | 适配 Hyperf 的调试工具 |
社区组件覆盖了从环境配置、变量调试到交互式 Shell、全链路调试面板的完整开发体验,是官方组件之外的重要补充。
三、如何向 Hyperf 提交你自己的组件
官方文档给出了明确的提交路径:
- 确保你开发的组件已适配 Hyperf;
- 直接向
hyperf/hyperf项目的master分支发送Pull Request; - PR 的内容即修改当前页面
(en/awesome-components.md),把你的组件以符合上表格式的条目加入对应分类。
也就是说,awesome-components 清单是一个开放共建的索引页,任何社区成员都可以通过 PR 将自己验证过的协程组件收录进来,帮助更多人快速选型。
四、如何将组件适配到 Hyperf
官方为组件开发者提供了专门的开发指南 Hyperf 组件开发指南,其核心思路如下。
4.1 先理解为什么需要适配
正如指南前言所述:在 PHP-FPM 架构下,需要某个能力时直接通过 Composer 引入对应库即可;但在 Hyperf 下,常驻内存与协程两大特性导致应用的生命周期与运行模式发生变化,因此并非所有 Library 都能直接使用。阅读指南前,需要通读 协程 与 依赖注入 章节,这是组件开发的基础。
4.2 推荐的双项目开发结构
官方推荐的开发环境由两个项目组成:
// 安装骨架项目并配置 composer create-project hyperf/hyperf-skeleton // 克隆 hyperf 组件库项目(将 hyperf 替换为你的 GitHub ID,即克隆你 fork 的项目) git clone git@github.com:hyperf/hyperf.git目录结构如下:
. ├── hyperf │ ├── bin │ └── src └── hyperf-skeleton ├── app ├── bin ├──config ├── runtime ├── test └── vendor4.3 通过 path 仓库建立软链接
在hyperf-skeleton的composer.json中加入repositories配置,使 Composer 以path形式直接加载hyperf目录下的组件源码:
{ "repositories": { "hyperf": { "type": "path", "url": "../hyperf/src/*" } } }随后删除锁文件与 vendor 目录并重新更新依赖:
cd hyperf-skeleton rm -rf composer.lock && rm -rf vendor && composer update完成后,hyperf-skeleton/vendor/hyperf下的所有项目目录都会通过软链接指向hyperf目录,可用ls -l验证:
cd vendor/hyperf/ ls -l看到如下连接关系即表示软链接建立成功:
cache -> ../../../hyperf/src/cache command -> ../../../hyperf/src/command config -> ../../../hyperf/src/config contract -> ../../../hyperf/src/contract database -> ../../../hyperf/src/database db-connection -> ../../../hyperf/src/db-connection devtool -> ../../../hyperf/src/devtool di -> ../../../hyperf/src/di dispatcher -> ../../../hyperf/src/dispatcher event -> ../../../hyperf/src/event exception-handler -> ../../../hyperf/src/exception-handler framework -> ../../../hyperf/src/framework guzzle -> ../../../hyperf/src/guzzle http-message -> ../../../hyperf/src/http-message http-server -> ../../../hyperf/src/http-server logger -> ../../../hyperf/src/logger memory -> ../../../hyperf/src/memory paginator -> ../../../hyperf/src/paginator pool -> ../../../hyperf/src/pool process -> ../../../hyperf/src/process redis -> ../../../hyperf/src/redis server -> ../../../hyperf/src/server testing -> ../../../hyperf/src/testing support -> ../../../hyperf/src/support4.4 修改、验证并提交 PR
建立软链接后,即可直接在 IDE 中修改vendor/hyperf下的文件(实际修改的是hyperf项目源码),完成适配与本地验证后,将hyperf项目中的改动commit,最后向主干提交Pull Request (PR)。这套工作流让组件开发者既能实时调试、又能以最小成本将改动贡献回上游。
五、从清单到落地:基于源码的选型建议
结合仓库源码,可以总结出几条务实的选型经验:
- 官方组件优先:清单中
hyperf/*前缀的组件在本仓库 src 目录均有对应实现,且通过 ConfigProvider 机制与 DI 容器深度集成(参考 hyperf/event 的 ConfigProvider),开箱即用; - 关注协程化实现:挑选社区组件时,可重点确认其是否检测协程环境并切换协程 Handler。以 hyperf/guzzle 为参照——它在
Coroutine::inCoroutine()为真时自动装配协程传输层,这是判断"协程安全"的典型特征; - 按场景组合治理组件:微服务场景可组合 json-rpc、load-balancer、rate-limit、circuit-breaker 与 tracer 形成完整闭环;
- 开发调试组件补位:多环境配置(hyperf-multi-env)、变量调试(hyperf-dump-server)、交互式 Shell(hyperf-tinker)与调试面板(telescope)可以显著提升本地开发效率。
结语
awesome-components 清单是 Hyperf 生态的选型入口,它既收录了官方协程化组件,也接纳社区贡献的经过验证的协程安全库。借助仓库内对应的源码实现(src 目录下的各组件)与 组件开发指南 提供的适配工作流,开发者既可以快速为业务挑选合适组件,也可以将自研组件贡献回生态,共同扩展 Hyperf 的能力边界。
- 后端
- 微服务
【免费下载链接】hyperf
🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.
相关推荐
Hyperf 协程组件生态全指南:Awesome Components 组件清单、提交流程与适配实践
Hyperf 协程组件生态全指南:Awesome Components 组件清单、提交流程与适配实践 Hyperf 之所以能成为一套可用于微服务与中间件场景的协
后端Web框架微服务RPC框架异步编程Hyperf 协程组件生态全景指南:Awesome Components 收录清单与组件开发适配实践
Hyperf 协程组件生态全景指南:Awesome Components 收录清单与组件开发适配实践 Hyperf 官方将所有组件库完成了协程化处理,使其可以在
后端Web框架微服务RPC框架异步编程如何快速掌握Detect-It-Easy:文件安全检测工具的完整指南
如何快速掌握Detect It Easy:文件安全检测工具的完整指南 在数字安全日益重要的今天,面对未知文件时, 文件安全检测工具 成为保护系统安全的第一道防线
后端Web框架微服务RPC框架异步编程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考