资讯详情

资讯详情

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 是一个以协程和高性能为核心特性的 PHP 框架其官方组件库中的所有组件均已完成协程化处理可直接在 Hyperf 及其他协程框架中安全使用。本文以官方收录的「協程元件庫」清单为主线系统梳理路由、事件、日志、数据库、RPC、服务治理、消息队列等二十余类组件并结合仓库内的 ConfigProvider 机制与组件开发指南源码讲解如何甄别、适配、提交与自建协程组件帮助读者快速为业务场景选型并参与生态共建。说明本文主体为docs/zh-tw/awesome-components.md协程组件库收录清单仓库内 组件开发指南、ConfigProvider 机制 以及src/下各官方组件的实现与配置用于补充原理性说明。为什么需要协程化的组件在传统 PHP-FPM 架构下需要借助第三方库时通常直接通过 Composer 引入一个对应的库(Library)即可。但在 Hyperf 中由于持久化应用和协程两个特性应用的生命周期和运行模式与 PHP-FPM 存在差异因此并非所有第三方库都能直接在 Hyperf 中使用——一些设计优秀的库可以直接使用另一些则需要经过协程化改造详见 组件开发指南前言。正因如此Hyperf 官方对所有官方组件均进行了协程化处理使其可安全地在 Hyperf 或其他协程框架内使用同时基于 Hyperf 的开放性与可扩展性社区可以开发或适配各种各样的组件形成不断壮大的组件生态。本清单即为官方收录的「已适配 Hyperf 的协程组件」与「经过验证可安全用于协程环境的常用库」组件顺序以收录时间排序便于开发者按需快速选型。如何提交我的组件如果您开发的协程组件已适配 Hyperf可以直接对hyperf/hyperf项目的master分支发起Pull Request即修改当前页docs/zh-cn/awesome-components.md对应条目将您的组件按分类补充进收录清单即可。提交前建议先阅读下文「组件设计规范」确保组件符合 Hyperf 的适配约定。如何适配 Hyperf官方提供了完整的 Hyperf 组件开发指南帮助开发者开发或适配 Hyperf 组件。适配的核心在于两件事遵循 PSR 等标准接口设计类以及通过 ConfigProvider 机制声明组件的依赖、监听器、注解扫描路径与默认配置下文将结合源码详述。此外官方还提供了hyperf/component-creator脚手架一条命令即可生成适配指定 Hyperf 版本的组件包骨架。组件列表按能力分类的生态全景以下分类与条目完整继承自官方收录清单其中标注「官方」的组件在仓库内均存在对应实现位于src/下可点击链接直达源码深入阅读。路由nikic/fastroute一个常用的高速路由组件第三方lazychanger/urlrewrite一个基于 PSR-7、与 nikic/fastroute 相同路由规则的 URL 重写工具第三方事件hyperf/event官方提供的基于 PSR-14 的事件管理器。仓库内 ConfigProvider.php 通过dependencies将Psr\EventDispatcher\EventDispatcherInterface与Psr\EventDispatcher\ListenerProviderInterface分别绑定到EventDispatcherFactory与ListenerProviderFactory实现了标准接口与容器的对接日志hyperf/logger官方提供的基于 PSR-3 的日志管理器是对 monolog 的抽象与封装。其 ConfigProvider.php 将Psr\Log\LoggerInterface绑定到LoggerFactory::make()并通过publish发布默认配置 logger.php后者预置了stack、single、daily、stderr、syslog、null六种 channel可组合任意 monolog Handler、Formatter 与 Processor命令hyperf/command官方提供的基于 symfony/console 扩展、支持注解的命令管理组件symfony/consoleSymfony 提供的独立命令行组件第三方可作为底层依赖数据库hyperf/database官方提供的基于 Eloquent 衍生的数据库 ORM可复用于其它框架hyperf/model-cache官方提供的基于 hyperf/database 的自动模型缓存组件reasno/fastmongo基于hyperf/gotask实现的协程化 MongoDB 客户端第三方hyperf-ext/translatable为模型提供多语言能力第三方233cy/hyperf-tenant为模型提供多租户字段区分第三方搜索引擎hyperf/elasticsearch官方提供的 Elasticsearch 协程客户端liangguifeng/hyperf-scout-meilisearch适配 hyperf/scout 的 Meilisearch 驱动参考 laravel/scout 设计第三方chungou/elasticsearch一个简单的 Elasticsearch 构造器第三方依赖注入容器hyperf/di官方提供的支持注解及 AOP 的依赖注入容器hyperf/pimple基于pimple/pimple实现的轻量级、符合 PSR-11 规范的容器组件可降低其他框架使用 Hyperf 组件的成本第三方服务hyperf/http-server官方提供的 HTTP 服务端hyperf/grpc-server官方提供的 gRPC 服务端hyperf/websocket-server官方提供的 WebSocket 服务端hyperf/rpc-server官方提供的通用 RPC 抽象服务端客户端hyperf/consul官方提供的 Consul 协程客户端hyperf/grpc-client官方提供的 gRPC 协程客户端hyperf/etcd官方提供的 ETCD 协程客户端hyperf/rpc-client官方提供的通用 RPC 抽象协程客户端hyperf/guzzle官方提供的 Guzzle HTTP 协程客户端hyperf/redis官方提供的 Redis 协程客户端hyperf/websocket-client官方提供的 WebSocket 协程客户端hyperf/cache官方提供的基于 PSR-16 的缓存协程客户端支持注解使用方式。其 ConfigProvider.php 声明了CacheableAspect、CacheEvictAspect、CachePutAspect、CacheAheadAspect、FailCacheAspect五个 AOP 切面正是注解缓存的底层支撑friendsofhyperf/http-client基于 Hyperf 的 Guzzle HTTP 协程客户端第三方friendsofhyperf/openai-client基于 Hyperf 的 OpenAI 客户端第三方消息队列hyperf/amqp官方提供的 AMQP 协程组件。默认配置 amqp.php 完整覆盖连接参数host/port/user/password/vhost、SSL、连接池、并发限制与 php-amqplib 参数心跳、超时等hyperf/async-queue官方提供的基于 Redis 的简单异步队列组件。默认配置 async_queue.php 支持驱动选择、通道名、重试间隔、处理超时、消费进程数与并发上限等hooklife/hyperf-aliyun-amqp使 hyperf/amqp 组件支持阿里云 AMQP第三方配置中心hyperf/config-apollo官方提供的 Apollo 配置中心接入组件hyperf/config-aliyun-acm官方提供的阿里云 ACM 应用配置服务接入组件hyperf/config-etcd官方提供的 ETCD 配置中心接入组件RPChyperf/json-rpc官方提供的 JSON-RPC 协议组件hyperf/rpc-multiplex官方提供的多路复用 RPC 组件hyperf/roc官方提供的 Golang 版本多路复用 RPC Server 组件第三方仓库limingxinleo/roc-skeletonGolang 版本多路复用 RPC Server 骨架包第三方服务治理hyperf/rate-limit官方提供的基于令牌桶算法的限流组件hyperf/load-balancer官方提供的负载均衡组件hyperf/service-governance官方提供的服务治理组件hyperf/tracer官方提供的 OpenTracing 分布式调用链追踪组件hyperf/circuit-breaker官方提供的服务熔断组件pudongping/hyperf-throttle-requests适配 Hyperf 框架的请求频率限流器功能类似 Laravel 的 throttle 中间件第三方friendsofhyperf/sentry适配 Hyperf 框架的 Sentry 组件用于异常监控与性能监控第三方定时任务hyperf/crontab官方提供的秒级定时任务组件。默认配置 crontab.php 仅需开启enable开关并在crontab数组中声明任务即可ID 生成器hyperf/snowflake官方提供的 Snowflake ID 生成器组件tangwei/snowflake基于hyperf/snowflake组件增强了工作机器ID的维护第三方文档生成hyperf/swagger官方提供的 Swagger 文档自动生成组件betatangwei/swagger一个基于 PHP 类型DTO自动生成 swagger 文档的组件支持启动自动扫描、自动生成路由UI与注解验证第三方GraphQLhyperf/graphql官方提供的 GraphQL 服务端组件beta热更新 / 热加载hyperf/watcher官方热更新组件使用说明详见对应文档ha-ni-cc/hyperf-watch一个基于 Swoole 实现的通用热更新组件第三方mix-php/swoolefor一个由 Mixphp 实现的通用热更新组件第三方buexplain/go-watch一个基于 Go 语言实现的通用热更新组件第三方remy/nodemon一个基于 node.js 实现的通用热更新组件第三方Warning请勿在生产环境使用热更新 / 热加载功能。Swoolehyperf/task官方提供的 Task 组件对 Swoole 的 Task 机制进行了封装与抽象提供便捷的注解用法hyperf/gotaskGoTask 通过 Swoole 进程管理功能启动 Go 程序作为 Swoole 主进程的边车Sidecar利用进程通信将任务投递给边车处理并接收返回值可理解为 Go 版的 Swoole TaskWorker第三方仓库开发调试firstphp/wsdebug通过WebSocket实时观测异常错误的开发调试组件第三方qbhy/hyperf-multi-env支持与 Laravel 类似的多 env 配置文件功能例如通过APP_ENVtesting可加载.env.testing配置覆盖默认的.env第三方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/jwtJWT 组件实现了完整的 JWT 认证能力第三方hyperf-ext/auth移植自illuminate/auth基本完整实现了 Laravel Auth 的功能特性第三方donjan-deng/hyperf-casbin适配 Hyperf 的开源访问控制框架 Casbin第三方测试hyperf/testing官方提供的单元测试组件friendsofhyperf/pest-plugin-hyperf适配 Hyperf 的 Pest 插件为 Pest 提供协程环境支持第三方分布式锁lysice/hyperf-redis-lock根据 Laravel 的 lock 组件改写适配 Hyperf 框架第三方pudongping/hyperf-wise-locksmith适配 Hyperf 框架的互斥锁库用于在高并发场景下提供 PHP 代码的有序执行支持文件锁、分布式锁、红锁、协程级互斥锁第三方分布式事务dtm-php/dtm-client支持 Hyperf 的 dtm 分布式事务客户端组件第三方注解配置hyperf-helper/dependency使用注解快速配置依赖关系并支持依赖优先级第三方DTOfatbit/form-request-param基于DTO的优雅强类型请求参数验证表单验证与自动注入组件第三方第三方 SDKyurunsoft/pay-sdk支持 Swoole 协程的支付宝/微信支付 SDK第三方yurunsoft/yurun-oauth-login支持 Swoole 协程的第三方登录授权 SDKQQ、微信、微博、GitHub、Gitee 等第三方w7corp/wechatEasyWeChat一个流行的非官方微信 SDKyansongda/hyperf-pay支持支付宝/微信的支付组件基于 yansongda/pay 实现适配 Hyperf 框架第三方alapi/hyperf-meilisearch为 Hyperf Scout 提供的 meilisearch 客户端第三方vinchan/message-notifyHyperf 异常监控报警通知组件钉钉群机器人、飞书群机器人、邮件、QQ 频道机器人、企业微信群机器人第三方组件适配的基石ConfigProvider 机制清单中官方组件之所以能开箱即用核心依赖的是ConfigProvider 机制。它是 Hyperf 组件化的关键机制组件间的解耦、组件的独立性以及组件的可重用性都基于该机制实现详见 ConfigProvider 机制。简单来说每个组件都会在根目录提供一个ConfigProvider类该类提供组件的全部配置信息Hyperf 框架启动时会加载所有 ConfigProvider并将其配置合并到Hyperf\Contract\ConfigInterface对应的实现类中从而完成组件在框架内的配置初始化。ConfigProvider 的定义方式ConfigProvider本身不依赖任何东西——不继承抽象类、不实现接口只需提供一个__invoke方法并返回符合约定的数组结构?php namespace Hyperf\Foo; class ConfigProvider { public function __invoke(): array { return [ // 合并到 config/autoload/dependencies.php 文件 dependencies [], // 合并到 config/autoload/annotations.php 文件 annotations [ scan [ paths [ __DIR__, ], ], ], // 默认 Command 的定义合并到 Hyperf\Contract\ConfigInterface 内与 config/autoload/commands.php 对应 commands [], // 与 commands 类似 listeners [], // 组件默认配置文件执行 vendor:publish 后会把 source 对应文件复制为 destination 对应文件 publish [ [ id config, description description of this config file., // 描述 // 建议默认配置放在 publish 文件夹中文件命名和组件名称相同 source __DIR__ . /../publish/file.php, // 配置文件路径 destination BASE_PATH . /config/autoload/file.php, // 复制目标路径 ], ], // 亦可继续定义其它配置最终都会合并到 ConfigInterface 对应的配置存储器中 ]; } }仓库内的真实 ConfigProvider以官方 hyperf/amqp 为例可见dependencies、listeners、publish的真实写法// src/amqp/src/ConfigProvider.php节选 return [ dependencies [ Producer::class Producer::class, Packer::class JsonPacker::class, Consumer::class ConsumerFactory::class, ], listeners [ BeforeMainServerStartListener::class 99, MainWorkerStartListener::class, ], publish [ [ id config, description The config for amqp., source __DIR__ . /../publish/amqp.php, destination BASE_PATH . /config/autoload/amqp.php, ], ], ];可以看到dependencies声明了生产者、序列化器与消费者的容器绑定如Packer默认绑定到JsonPackerlisteners声明了服务启动阶段需要注册的监听器数组的值可用于指定监听器优先级此处为 99publish则定义了配置发布的来源与目标路径。类似地hyperf/logger 通过闭包把LoggerInterface绑定到LoggerFactory::make()hyperf/cache 则额外声明了注解扫描的 collectors 与五个 AOP 切面——不同组件的 ConfigProvider 结构完全按需定制充分体现了机制的灵活性。通过 composer.json 声明 ConfigProvider只创建一个类并不会被 Hyperf 自动加载还需要在组件的composer.json中通过extra.hyperf.config指定 ConfigProvider 类的命名空间。仓库内 src/amqp/composer.json 是标准范例{ name: hyperf/amqp, autoload: { psr-4: { Hyperf\\Amqp\\: src/ } }, extra: { branch-alias: { dev-master: 3.2-dev }, hyperf: { config: Hyperf\\Amqp\\ConfigProvider } } }定义之后需要执行composer install、composer update或composer dump-autoload等会让 Composer 重新生成composer.lock的命令ConfigProvider 才能被正常读取。发布默认配置文件在 ConfigProvider 中定义好publish后可以使用如下命令快速生成配置文件php bin/hyperf.php vendor:publish 包名称例如包名为hyperf/amqp执行php bin/hyperf.php vendor:publish hyperf/amqp即可将 src/amqp/publish/amqp.php 复制为项目下的config/autoload/amqp.php。该文件包含完整的连接参数host、port、user、password、vhost、open_ssl、concurrent.limit并发上限需不小于 qos 的 prefetch_count否则会被自动扩充、pool.connections连接池大小、io以及params中的心跳、超时、keepalive 等 php-amqplib 底层参数均可通过环境变量或直接修改配置覆盖。类似地async_queue.php 中channel、timeout、retry_seconds、handle_timeout、processes、concurrent.limit、max_messages等字段分别控制异步队列的通道、超时、重试与并发行为。ConfigProvider 的执行流程ConfigProvider 的配置并非必须如此划分上述只是约定俗成的格式最终如何解析由使用者决定可通过修改 Skeleton 项目的config/container.php调整加载逻辑也就是说config/container.php决定了 ConfigProvider 的扫描与加载。快速创建新组件Hyperf官方提供了工具来快速创建组件包# 创建适配 Hyperf 最新版本的组件包 composer create-project hyperf/component-creator your_component dev-master # 创建适配 Hyperf 2.0 版本的组件包 composer create-project hyperf/component-creator your_component 2.0.*在项目中使用未发布的组件包假设项目目录为/opt/project组件包目录为/opt/your_component组件名为your_component/your_component则在项目的composer.json中追加如下配置{ require: { your_component/your_component: dev-master }, repositories: { your_component: { type: path, url: /opt/your_component } } }最后在项目目录/opt/project中执行composer update -o即可。本地联调技巧源码软连接在开发多个组件时官方指南组件开发指南前言建议将hyperf-skeleton项目骨架与hyperf组件库克隆到同一目录并通过path来源让 Composer 加载本地组件例如在 skeleton 的composer.json中配置{ repositories: { hyperf: { type: path, url: ../hyperf/src/* } } }随后删除composer.lock与vendor目录并重新执行composer update即可让vendor/hyperf下的组件目录以软连接形式指向hyperf源码目录。这样在 IDE 中修改vendor/hyperf内的文件实际修改的就是本地组件库代码便于直接在源码上进行commit并向主干提交Pull Request。组件设计规范由于composer.json的extra属性在数据不被利用时没有其他作用与影响ConfigProvider 机制不会干扰其他不使用该机制的框架这为组件复用打下了基础但这也要求在组件设计时必须遵循以下规范详见 ConfigProvider 机制所有类的设计都必须允许通过标准OOP方式使用所有 Hyperf 专有功能必须作为增强功能并以单独的类提供保证在非 Hyperf 框架下仍可通过标准手段使用组件组件依赖的设计若可满足 PSR 标准则优先依赖对应接口而非实现类若 PSR 标准未包含该功能则优先满足并依赖 Hyperf 契约库 hyperf/contract 内的接口实现 Hyperf 专有功能所需的增强类其依赖不应写入composer.json的require项而应写入suggest项作为建议组件不应通过注解进行依赖注入注入方式只使用构造函数注入以便同时满足 OOP 使用场景组件不应通过注解进行功能定义功能定义应只通过ConfigProvider完成类设计应尽可能不存储状态数据否则无法作为长生命周期对象提供也不便于依赖注入会在一定程度上降低性能状态数据应通过Hyperf\Context\Context协程上下文存储。对照清单可以发现官方组件如 hyperf/amqp/composer.json正是把hyperf/di、hyperf/event等可选项写入suggest而非require与上述规范完全一致。选型与使用建议综合官方收录清单与仓库实现可以总结出以下实践要点优先选择官方组件官方组件均已完成协程化处理且在当前仓库src/下有完整实现与测试例如src/amqp/tests/、src/async-queue/tests/等可通过 composer.json 查看其依赖关系稳定性与文档支持更有保障按需选用社区组件社区组件覆盖了支付 SDK、第三方登录、Casbin 权限、Sentry 监控、Pest 测试插件等官方尚未覆盖的领域选型时注意确认其协程适配方式是否基于 Swoole 协程化改造、是否依赖 gotask 边车等警惕非协程库并非所有第三方库都能直接在 Hyperf 中使用对未明确声明协程支持的库应先按组件开发指南甄别其生命周期与阻塞行为热更新禁止用于生产热更新 / 热加载类组件仅适合开发调试场景清单中已明确给出 Warning发布配置的入口统一安装任何组件后均可通过php bin/hyperf.php vendor:publish 包名快速生成其默认配置再按需修改config/autoload/下的对应文件。综上本文收录的组件覆盖了从基础设施路由、日志、命令、数据库到分布式能力RPC、消息队列、服务治理、分布式锁/事务再到周边生态认证、调试、文档生成、第三方 SDK的完整链路。开发者既可以直接选用清单中的成熟组件快速搭建业务也可以参考 ConfigProvider 机制与组件设计规范将自研能力封装为可复用的协程组件并提交收录、共建生态。赞分享后端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 是一个基于 Swoole/Swow 的高性能协程框架其组件体系的核后端Web框架微服务RPC框架异步编程Hyperf 协程组件生态指南官方组件库与社区适配组件全景解析Hyperf 协程组件生态指南官方组件库与社区适配组件全景解析 Hyperf 是一个以“极速与灵活”为核心目标的高性能协程框架其开放性和可扩展性不仅体现在框后端微服务Hyperf 协程组件生态全景指南官方组件目录、社区精选与组件适配机制解析Hyperf 协程组件生态全景指南官方组件目录、社区精选与组件适配机制解析 Hyperf 的官方组件库已经全部完成协程化改造可以在 Hyperf 及其他协程后端微服务上一篇Onyx 本地监控栈实战用 Prometheus Grafana 观测 API 与 Celery 索引流水线下一篇数据伦理案例研究写作指南基于 Data-Science-For-Beginners 第 2 课作业的实战方法论创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →