
后端Web框架微服务RPC框架异步编程【免费下载链接】hyperf A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.项目地址https://gitcode.com/hyperf/hyperf点击查看免费下载Hyperf 是一个基于 Swoole/Swow 的高性能协程框架其组件体系的核心原则是所有官方组件均已完成协程化处理可安全地在 Hyperf 内或其它协程框架内使用。本篇指南以 Hyperf 官方文档中的协程组件库收录页为主体系统梳理路由、数据库、消息队列、RPC、服务治理、定时任务、权限认证等二十余类官方与社区协程组件并结合本仓库hyperf/hyperf monorepo的源码结构、组件开发指南与 ConfigProvider 机制帮助读者快速定位所需组件、理解组件为何必须协程化、掌握适配与提交组件的完整流程。为什么需要协程组件库在传统 PHP-FPM 架构下通过 Composer 引入一个第三方库通常就能直接满足需求。但在 Hyperf 这类持久化应用 协程架构下应用的生命周期与运行模式发生了根本变化进程常驻内存、请求在协程中并发执行任何阻塞式 IO 调用都会拖垮整个进程的吞吐。因此并非所有Library都能在 Hyperf 中直接使用只有经过协程化改造例如将阻塞式 Guzzle、Redis、MySQL 客户端替换为协程客户端的组件才安全。Hyperf 官方基于此开放性与可扩展性将全部官方组件进行了协程化处理并持续收录社区中已经过验证可安全用于协程环境的常用库最终形成本文所述的协程组件库页面。组件列表的收录顺序以收录时间排序页面本身就是一个不断生长的生态索引。从本仓库的 composer.json 可以看到hyperf/hyperf 是一个 monorepo官方组件全部以hyperf/*命名空间组织在 src 目录下并通过根composer.json的replace字段如hyperf/amqp: *、hyperf/redis: *整体替代发布保证开发者引入hyperf/hyperf即获得完整的官方组件集同时每个组件又拥有独立的 composer.json通过extra.hyperf.config指向各自的ConfigProvider实现组件间的解耦与独立可复用。组件分类全景以下按官方收录页的分类逐一展开。表格中标注官方的组件均可在本仓库 src 目录下找到对应实现源码标注社区的组件来自社区贡献需通过 Composer 单独引入。路由组件类型说明仓库参考nikic/fastroute社区一个常用的高速路由—lazychanger/urlrewrite社区基于 PSR-7、与 fastroute 相同路由规则的 URL 重写工具—路由层是 HTTP 服务的入口。Hyperf 官方 HTTP 服务端组件 hyperf/http-server 正是基于高速路由解析请求并分发到注解路由控制器可进一步阅读 router.md。事件组件类型说明仓库参考hyperf/event官方基于 PSR-14 的事件管理器src/eventhyperf/event实现了Psr\EventDispatcher\EventDispatcherInterface。其核心实现见 EventDispatcher.phpdispatch方法从ListenerProviderInterface获取针对当前事件的全部监听器并依次调用若事件实现了StoppableEventInterface且调用isPropagationStopped()返回true则立即终止传播支持可选 Logger 输出Event %s handled by %s listener.的调试日志。事件机制常与 hyperf/command、hyperf/model-cache通过事件监听实现缓存失效等组件配合使用。日志组件类型说明仓库参考hyperf/logger官方基于 PSR-3 的日志管理器是 monolog 的抽象与封装src/loggerhyperf/logger提供LoggerFactory工厂见 LoggerFactory.php通过make(string $name, ?string $channel)从config/autoload/logger.php读取logger.channels.*配置支持旧版配置风格自动兼容、可调用配置项以及按需装配 Handler 与 Processor最终返回 PSR-3 兼容的Logger实例。这意味着在协程环境下你可以安全地获得统一的日志抽象。命令组件类型说明仓库参考hyperf/command官方基于 symfony/console 扩展、支持注解的命令管理组件src/commandsymfony/console社区Symfony 提供的独立命令管理组件—hyperf/command允许开发者通过注解#[Command]、#[Argument]、#[Option]等快速声明命令行工具框架启动时自动扫描并注册最终基于bin/hyperf.php统一入口执行。数据库组件类型说明仓库参考hyperf/database官方基于 Eloquent 衍生的数据库 ORM可复用于其它框架src/databasehyperf/model-cache官方基于 hyperf/database 的自动模型缓存组件src/model-cachereasno/fastmongo社区基于 hyperf/gotask 实现的协程化 MongoDB 客户端—hyperf-ext/translatable社区为模型提供多语言能力—233cy/hyperf-tenant社区为模型提供多租户字段区分—hyperf/database是官方 ORM 核心本仓库还配套了 hyperf/database-pgsql、hyperf/database-sqlite、hyperf/database-sqlserver 等方言驱动以及 hyperf/db-connection 连接管理组件。hyperf/model-cache在 composer.json 中声明依赖psr/simple-cache并建议配合hyperf/event使用DeleteCacheListener事件监听实现缓存自动失效是典型的ORM 缓存 事件协作文案。搜索引擎组件类型说明仓库参考hyperf/elasticsearch官方Elasticsearch 协程客户端src/elasticsearchliangguifeng/hyperf-scout-meilisearch社区适配 hyperf/scout 的 Meilisearch 驱动参考 laravel/scout—chungou/elasticsearch社区一个简单的 Elasticsearch 构造器—hyperf/elasticsearch是官方协程化 Elasticsearch 客户端可与 hyperf/scout 全文搜索组件配合社区还提供了 Meilisearch 驱动以扩展 scout 的搜索后端选择。依赖注入容器组件类型说明仓库参考hyperf/di官方支持注解及 AOP 的依赖注入容器src/dihyperf/pimple社区基于 pimple/pimple 的轻量级 PSR-11 规范容器可降低其它框架使用 Hyperf 组件的成本—hyperf/di是整个框架的基石它提供注解扫描、依赖注入与 AOP 面向切面编程能力详见 di.md 与 aop.md几乎所有官方组件都通过它完成装配。社区组件hyperf/pimple则面向希望在不引入完整 DI 的前提下复用 Hyperf 组件的场景。服务端组件类型说明仓库参考hyperf/http-server官方HTTP 服务端src/http-serverhyperf/grpc-server官方gRPC 服务端src/grpc-serverhyperf/websocket-server官方WebSocket 服务端src/websocket-serverhyperf/rpc-server官方通用 RPC 抽象服务端src/rpc-server官方服务端组件覆盖了 HTTP、WebSocket、gRPC 与通用 RPC 四大协议配合 src/server 服务生命周期管理与 src/framework 框架引导逻辑即可在一个常驻进程中同时对外提供多协议服务。客户端组件类型说明仓库参考hyperf/consul官方Consul 协程客户端src/consulhyperf/grpc-client官方gRPC 协程客户端src/grpc-clienthyperf/etcd官方etcd 协程客户端src/etcdhyperf/rpc-client官方通用 RPC 抽象协程客户端src/rpc-clienthyperf/guzzle官方Guzzle HTTP 协程客户端src/guzzlehyperf/redis官方Redis 协程客户端src/redishyperf/websocket-client官方WebSocket 协程客户端src/websocket-clienthyperf/cache官方基于 PSR-16 的缓存协程客户端支持注解用法src/cachefriendsofhyperf/http-client社区基于 Hyperf 的 Guzzle HTTP 协程客户端—friendsofhyperf/openai-client社区基于 Hyperf 的 OpenAI 客户端—客户端组件是协程化的重灾区hyperf/guzzle提供CoroutineHandler将 Guzzle 请求切换为协程 IO这也是下文 EasyWeChat 等第三方 SDK 适配的关键hyperf/redis提供连接池化的协程 Redis 客户端hyperf/cache则基于 PSR-16 提供注解式缓存读写。消息队列组件类型说明仓库参考hyperf/amqp官方AMQP 协程组件src/amqphyperf/async-queue官方简单的基于 Redis 的异步队列组件src/async-queuehooklife/hyperf-aliyun-amqp社区使 hyperf/amqp 支持阿里云 AMQP—消息队列生态中hyperf/amqp面向 RabbitMQ 等 AMQP 协议中间件仓库中同时提供 publish 默认配置hyperf/async-queue则以 Redis 为后端实现轻量异步任务详见 async-queue.md。此外仓库还包含 hyperf/nsq、hyperf/nats、hyperf/kafka 等官方协程消息组件可按中间件选型自由组合。配置中心组件类型说明仓库参考hyperf/config-apollo官方Apollo 配置中心接入组件src/config-apollohyperf/config-aliyun-acm官方阿里云 ACM 应用配置服务接入组件src/config-aliyun-acmhyperf/config-etcd官方etcd 配置中心接入组件src/config-etcd配置中心组件让常驻进程可以动态拉取与监听远程配置变更。仓库中还提供 hyperf/config-nacos、hyperf/config-zookeeper、hyperf/config-center 等通用配置中心抽象完整覆盖主流配置中心方案。RPC组件类型说明仓库参考hyperf/json-rpc官方JSON-RPC 协议组件src/json-rpchyperf/rpc-multiplex官方多路复用 RPC 组件src/rpc-multiplexhyperf/roc官方Golang 版本的多路复用 RPC Server 组件—limingxinleo/roc-skeleton社区Golang 版本多路复用 RPC Server 骨架包—RPC 是微服务通信的骨干。hyperf/json-rpc基于 PSR 规范实现 JSON-RPC 协议见 json-rpc.mdhyperf/rpc-multiplex在单连接上实现多路复用以降低连接开销见 rpc-multiplex.mdGo 生态侧的hyperf/roc与roc-skeleton则帮助跨语言部署 RPC Server。服务治理组件类型说明仓库参考hyperf/rate-limit官方基于令牌桶算法的限流组件src/rate-limithyperf/load-balancer官方负载均衡组件src/load-balancerhyperf/service-governance官方服务治理组件src/service-governancehyperf/tracer官方OpenTracing 分布式调用链追踪组件src/tracerhyperf/circuit-breaker官方服务熔断组件src/circuit-breakerpudongping/hyperf-throttle-requests社区请求频率限流器功能类似 Laravel 的 throttle 中间件—friendsofhyperf/sentry社区适配 Hyperf 的 Sentry 异常监控与性能监控组件—hyperf/load-balancer提供随机、轮询、加权等负载均衡算法hyperf/service-governance与 hyperf/service-governance-consul、hyperf/service-governance-nacos 共同完成服务注册与发现hyperf/tracer实现 OpenTracing 链路追踪hyperf/circuit-breaker提供熔断保护hyperf/rate-limit提供令牌桶限流共同构成完整的服务治理矩阵参见 microservice.md。定时任务组件类型说明仓库参考hyperf/crontab官方秒级定时任务组件src/crontabhyperf/crontab支持秒级粒度的 Cron 表达式可通过注解声明任务并由框架常驻进程精确调度见 crontab.md是 FPM 时代难以实现的常驻型定时能力。ID 生成器组件类型说明仓库参考hyperf/snowflake官方Snowflake ID 生成器组件src/snowflaketangwei/snowflake社区基于 hyperf/snowflake 增强工作机器 ID 的维护—hyperf/snowflake提供分布式雪花 ID 生成见 snowflake.md社区版本则针对多实例部署下工作机器 ID 的自动维护做了增强。文档生成与 GraphQL组件类型说明仓库参考hyperf/swagger官方Swagger 文档自动生成组件betasrc/swaggertangwei/swagger社区基于 PHP 类型DTO自动生成 Swagger 文档并支持注解验证—hyperf/graphql官方GraphQL 服务端组件betasrc/graphqlhyperf/swagger通过注解扫描自动生成 OpenAPI 文档见 swagger.mdhyperf/graphql基于 graphqlite 提供 GraphQL 服务端能力见 graphql.md。热更新/热重载组件类型说明仓库参考hyperf/watcher官方官方热更新组件src/watcher使用指南见 watcher.mdha-ni-cc/hyperf-watch社区基于 Swoole 的通用热更新组件—mix-php/swoolefor社区由 MixPHP 实现的通用热更新组件—buexplain/go-watch社区基于 Go 语言实现的通用热更新组件—remy/nodemon社区基于 Node.js 实现的通用热更新组件—hyperf/watcher的实现核心见 Watcher.php其run()方法先转储 autoload、以协程驱动监听文件变更通道Channel捕获到变更后调用 collector 重载并重启服务。需要特别注意的是官方收录页给出了明确的Warning请勿于生产环境使用热更新/热重载功能它只服务于开发调试场景。Swoole 生态组件类型说明仓库参考hyperf/task官方对 Swoole Task 机制的封装与抽象提供便捷注解用法src/taskhyperf/gotask社区通过 Swoole 进程管理启动 Go 进程作为 Sidecar可理解为 Go 版 Swoole TaskWorker—hyperf/task将 Swoole 的 TaskWorker 机制封装为注解式任务见 task.mdhyperf/gotask则让 PHP 与 Go 通过进程通信协作把重计算任务投递给 Go 边车处理。开发调试组件类型说明仓库参考firstphp/wsdebug社区通过 WebSocket 实时观测异常错误的调试组件—qbhy/hyperf-multi-env社区支持类似 Laravel 的多 env 配置如APP_ENVtesting加载.env.testing—qiutuleng/hyperf-dump-server社区提供dump函数将变量打印到另一命令行窗口基于 Symfony Var-Dump Server—leearvin/hyperf-tinker社区基于 PsySH 的交互式 Hyperf shell 容器—friendsofhyperf/telescope社区适配 Hyperf 的调试工具—权限认证组件类型说明仓库参考fx/hyperf-http-auth社区由 Laravel auth 组件改写、适配 Hyperf—96qbhy/hyperf-auth社区参考 Laravel auth 设计支持 jwt、session、sso单点多设备登录驱动—hyperf-ext/jwt社区完整实现 JWT 认证能力的组件—hyperf-ext/auth社区移植自 illuminate/auth基本完整实现 Laravel Auth 功能—donjan-deng/hyperf-casbin社区适配 Hyperf 的开源访问控制框架 Casbin—权限认证方向既有 JWT、Session、SSO 多驱动的 auth 方案也有基于 Casbin 的 RBAC/ABAC 访问控制方案可按业务复杂度和登录形态选择。官方侧还提供 hyperf/validation 校验组件与 hyperf/session 会话组件作为基础设施。测试组件类型说明仓库参考hyperf/testing官方单元测试组件src/testingfriendsofhyperf/pest-plugin-hyperf社区适配 Hyperf 的 Pest 插件为 Pest 提供协程环境支持—hyperf/testing提供协程化测试基类与请求模拟能力见 testing.md本仓库各组件目录下的tests/即为该组件的实际用例集如 src/event/tests可作为编写协程测试的参考。分布式锁与分布式事务组件类型说明仓库参考lysice/hyperf-redis-lock社区根据 Laravel lock 组件改写、适配 Hyperf—pudongping/hyperf-wise-locksmith社区互斥锁库支持文件锁、分布式锁、红锁、协程级互斥锁—dtm-php/dtm-client社区支持 Hyperf 的 dtm 分布式事务客户端—高并发场景下协程级互斥锁同一进程内与分布式锁跨进程/跨实例是两类常见需求分布式事务则可借助 dtm 客户端与官方 distributed-transaction.md 文档中的思路落地。注解配置与 DTO组件类型说明仓库参考hyperf-helper/dependency社区使用注解快速配置依赖关系并支持依赖优先级—fatbit/form-request-param社区基于 DTO 的强类型请求参数验证表单验证与自动注入组件—注解驱动是 Hyperf 的开发范式hyperf-helper/dependency扩展注解式依赖装配form-request-param则将请求参数自动校验并注入为强类型 DTO减少控制器样板代码。第三方 SDK组件类型说明仓库参考yurunsoft/pay-sdk社区支持 Swoole 协程的支付宝/微信支付 SDK—yurunsoft/yurun-oauth-login社区支持 Swoole 协程的第三方登录授权 SDKQQ、微信、微博、GitHub、Gitee 等—w7corp/wechat社区EasyWeChat流行的非官方微信 SDK适配指南见 sdks/wechat.mdyansongda/hyperf-pay社区支持支付宝/微信的支付组件基于 yansongda/pay 实现—alapi/hyperf-meilisearch社区为 Hyperf Scout 提供的 meilisearch 客户端—vinchan/message-notify社区异常监控报警通知组件钉钉群机器人、飞书群机器人、邮件、QQ 频道机器人、企业微信群机器人—第三方 SDK 通常为 PHP-FPM 设计直接引入后需做协程化适配。以 EasyWeChat 为例sdks/wechat.md 给出了标准做法将默认的 Curl Handler 替换为Hyperf\Guzzle\CoroutineHandler构造的HandlerStack并重新绑定http_client与guzzle_handler或直接修改SWOOLE_HOOK_FLAGS启用 Swoole 原生 curl 钩子Swoole 4.7.0 开启 native curl 时可省略此步骤。这一替换阻塞客户端为协程客户端的思路适用于绝大多数第三方 SDK 的适配。如何适配 Hyperf组件开发指南要点官方在 component-guide 目录下提供了完整的组件开发指南核心要点如下适配的前提认知传统Library直接引入即可而 Hyperf 组件由于持久化应用 协程特性需要开发者先全面阅读协程与依赖注入章节。甄别一个库能否直接使用关键是判断其 IO 是否阻塞、是否依赖每次请求重建的全局状态不能直接使用的库需要借助协程客户端或 Swoole Runtime Hook 完成适配。ConfigProvider 机制组件装配的关键configprovider.md 解释了组件解耦与可重用性的基础——ConfigProvider。每个组件在根目录提供一个实现__invoke(): array的类返回dependencies、annotations注解扫描路径、commands、listeners、publish默认配置文件发布等配置结构框架启动时统一合并进Hyperf\Contract\ConfigInterface。本仓库所有官方组件均遵循此机制例如 src/event/composer.json 中的extra.hyperf.config: Hyperf\\Event\\ConfigProvider。配置文件发布命令php bin/hyperf.php vendor:publish hyperf/amqp其中hyperf/amqp为包名称执行后会将组件publish/目录下的默认配置复制到config/autoload/对应位置。创建与联调组件包create.md 提供了快速脚手架与本地联调方案# 创建适配 Hyperf 最新版本的组件包 composer create-project hyperf/component-creator your_component dev-master # 创建适配 Hyperf 2.0 版本的组件包 composer create-project hyperf/component-creator your_component 2.0.*本地联调时可在项目composer.json中声明path类型仓库指向组件目录再执行composer update -o加载本地未发布组件{ require: { your_component/your_component: dev-master }, repositories: { your_component: { type: path, url: /opt/your_component } } }深度开发以骨架 组件库并行组织代码intro.md 推荐将hyperf-skeleton项目与 hyperf/hyperf 组件库克隆到同一目录通过path仓库让 Composer 以软链接形式加载本地组件源码从而在 IDE 中直接修改vendor/hyperf/*即等价于修改组件源码完成后直接在组件仓库提交改动。这种方式需要本地同时存在可运行的骨架项目与克隆的组件库composer create-project hyperf/hyperf-skeleton git clone https://gitcode.com/hyperf/hyperf并在骨架项目的composer.json中追加{ repositories: { hyperf: { type: path, url: ../hyperf/src/* } } }随后在骨架目录执行composer update重建依赖最终vendor/hyperf/下的组件目录将以软链接指向hyperf/src/*注意该方式可能因软链接无法跳转而不适用于 Windows for Docker 环境。如何提交组件到收录页如果你开发的协程组件已完成 Hyperf 适配并希望被官方收录可直接对 hyperf/hyperf 仓库的master分支发起 Pull Request变更对象即为本文所基于的收录页docs/zh-cn/awesome-components.md按照既有分类在对应小节追加一行组件条目名称 一句功能描述官方审核通过后即可纳入组件库列表。收录顺序以收录时间为准因此新增条目追加在分类末尾即可。组件选型与生产环境注意事项面对如此丰富的组件矩阵选型时可以遵循几条原则优先官方组件官方组件均在 src 下维护源码、配置与测试如 src/amqp/tests、src/crontab/tests长期维护与协程安全性更有保障本文组件分类全景表格中标注官方的组件均可直接在本仓库查看实现。社区组件按需引入收录页中的社区组件均经过协程环境验证但引入前仍建议阅读其文档确认维护状态与适配版本例如hyperf-ext/jwt、hyperf-ext/auth由独立组织维护。区分开发/生产用途热更新/热重载类组件包括官方hyperf/watcher仅限开发调试使用官方明确警告请勿于生产环境使用。第三方 SDK 必须协程化FPM 架构的 SDK如支付、微信类直接使用会阻塞协程需按 sdks/wechat.md 的模式替换 Handler 或开启 Swoole Runtime Hook。结语本指南以 Hyperf 官方协程组件库收录页为骨架完整梳理了路由、事件、日志、命令、数据库、搜索引擎、DI、服务端/客户端、消息队列、配置中心、RPC、服务治理、定时任务、ID 生成、文档生成、热更新、权限认证、测试、分布式锁/事务、注解配置、DTO 与第三方 SDK 等二十余类组件并结合 hyperf/hyperf 仓库源码揭示了组件协程化、ConfigProvider 装配与 monorepo 组织方式的底层原理。无论你是要在项目中快速选型还是准备开发并提交自己的 Hyperf 组件本文列出的分类索引、适配流程与仓库参考路径都可以作为直接的实践入口。赞分享后端Web框架微服务RPC框架异步编程【免费下载链接】hyperf A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.项目地址https://gitcode.com/hyperf/hyperf点击查看免费下载相关推荐Hyperf 协程组件生态全景指南官方组件目录、社区精选与组件适配机制解析Hyperf 协程组件生态全景指南官方组件目录、社区精选与组件适配机制解析 Hyperf 的官方组件库已经全部完成协程化改造可以在 Hyperf 及其他协程后端微服务Hyperf 协程组件生态全景指南Awesome Components 收录清单与组件开发适配实践Hyperf 协程组件生态全景指南Awesome Components 收录清单与组件开发适配实践 Hyperf 官方将所有组件库完成了协程化处理使其可以在后端Web框架微服务RPC框架异步编程Hyperf 协程组件生态全指南Awesome Components 组件清单、提交流程与适配实践Hyperf 协程组件生态全指南Awesome Components 组件清单、提交流程与适配实践 Hyperf 之所以能成为一套可用于微服务与中间件场景的协后端Web框架微服务RPC框架异步编程上一篇YelpReviewFull数据预处理完整教程从Parquet文件到模型输入下一篇如何使用Vibe Kanban实现UI组件状态管理掌握展开与收起的持久化存储技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考