2024年11月Hyperf下载-Hyperf v2.1.10

发布时间:

  ⑴Hyperf是一款非常专业且优秀的企业级协程框架,该框架具有性能高灵活性高的特点,是基于Swoole

  ⑵.+实现的,框架组件库除了常见的协程版的MySQL客户端Redis客户端外,还提供了其它多种不同的组件,包括JSON RPC

  ⑶服务器及客户端AMQP组件等,省去了自己实现对应协程版本的麻烦,满足丰富的技术场景和业务场景,在框架设计上进行了大量的优化,从而能够确保超高性能的输出,同时为组件进行了大量的单元测试以保证逻辑的正确,也维护了高质量的文档,欢迎有需要的用户下载体验

  ⑷全协程异步实现,性能远超所有传统 PHP-FPM 框架

  ⑸经历过长时间生产环境考验的企业级框架设计,稳定可靠

  ⑹健全的微服务体系,gRPCJSON RPC服务发现熔断,灵活完善

  ⑺全组件化设计,超多常用组件,绝大部分组件均可复用于其它框架

  ⑻基于相关组件可快速搭建出企业级的分布式系统,极速扩容

  ⑼完备的自动化测试,从开发到生产交付全流程保障

  ⑽简单化 协程化 组件化

  ⑾开箱即用,快人一步

  ⑿官方提供超多常用组件,随用随取

  ⒀原生协程,超高性能

  ⒁原生协程能力支持,性能强悍

  ⒂丰富组件,任意组合

  ⒃全组件化设计,可复用于其它框架

  ⒄生产级别的协程框架

  ⒅由 Swoole 原生协程强力驱动

  ⒆通过配置文件定义路由路由的文件位于 hyperf-skeleton 项目的 config/routes.php ,下面是一些常用的用法示例。

  ⒇通过注解来定义路由Hyperf 提供了极其强大和方便灵活的 注解 功能,在路由的定义上也毫无疑问地提供了注解定义的方式,Hyperf 提供了

  ⒈Controller 和 AutoController 两种注解来定义一个 Controller,此处仅做简单的说明,更多细节请查阅 路由 章节。

  ⒉通过 AutoController 注解定义路由AutoController 为绝大多数简单的访问场景提供路由绑定支持,使用

  ⒊AutoController 时则 Hyperf 会自动解析所在类的所有 public 方法并提供 GET 和 POST 两种请求方式。

  ⒋使用 AutoController 注解时需 use HyperfHttpServerAnnotationAutoController;

  ⒌驼峰命名的控制器,会自动转化为蛇形路由,以下为控制器与实际路由的对应关系示例:

  ⒍通过 Controller 注解定义路由Controller 为满足更细致的路由定义需求而存在,使用 Controller

  ⒎注解用于表明当前类为一个 Controller 类,同时需配合 RequestMapping 注解来对请求方法和请求路径进行更详细的定义。

  ⒏我们也提供了多种快速便捷的 Mapping 注解,如

  ⒐GetMappingPostMappingPutMappingPatchMappingDeleteMapping

  ⒑种便捷的注解用于表明允许不同的请求方法。

  ⒒处理 HTTP 请求Hyperf 是完全开放的,本质上没有规定您必须基于某种模式下去实现请求的处理,您可以采用传统的 MVC 模式,亦可以采用

  ⒓RequestHandler 模式 来进行开发。

  ⒔我们以 MVC 模式 来举个例子:

  ⒕在 app 文件夹内创建一个 Controller 文件夹并创建 IndexController.php 如下,index 方法内从请求中获取了 id

  ⒖参数,并转换为 字符串 类型返回到客户端。

  ⒗依赖自动注入依赖自动注入是 Hyperf 提供的一个非常强大的功能,也是保持框架灵活性的根基。

  ⒘Hyperf 提供了两种注入方式,一种是大家常见的通过构造函数注入,另一种是通过 Inject

  ⒙注解注入,下面我们举个例子并分别以两种方式展示注入的实现;

  ⒚假设我们存在一个 AppServiceUserService 类,类中存在一个 getInfoById(int $id) 方法通过传递一个 id

  ⒛并最终返回一个用户实体,由于返回值并不是我们这里所需要关注的,所以不做过多阐述,我们要关注的是在任意的类中获取 UserService

  ①并调用里面的方法,一般的方法是通过 new UserService() 来实例化该服务类,但在 Hyperf 下,我们有更优的解决方法。

  ②通过构造函数注入只需在构造函数的参数内声明参数的类型,Hyperf 会自动注入对应的对象或值。

  ③通过 Inject 注解注入只需对对应的类属性通过 var 声明参数的类型,并使用 Inject 注解标记属性 ,Hyperf

  ④会自动注入对应的对象或值。

  ⑤使用 Inject 注解时需 use HyperfDiAnnotationInject; 命名空间;

  ⑥通过上面的示例我们不难发现 $userService 在没有实例化的情况下, 属性对应的类对象被自动注入了。

  ⑦不过这里的案例并未真正体现出依赖自动注入的好处及其强大之处,我们假设一下 UserService

  ⑧也存在很多的依赖,而这些依赖同时又存在很多其它的依赖时,new 实例化的方式就需要手动实例化很多的对象并调整好对应的参数位,而在 Hyperf

  ⑨里我们就无须手动管理这些依赖,只需要声明一下最终使用的类即可。

  ⑩而当 UserService 需要发生替换等剧烈的内部变化时,比如从一个本地服务替换成了一个 RPC 远程服务,也只需要通过配置调整依赖中

  ⅠUserService 这个键值对应的类为新的 RPC 服务类即可。

  Ⅱ启动 Hyperf 服务由于 Hyperf 内置了协程服务器,也就意味着 Hyperf 将以 CLI

  Ⅲ的形式去运行,所以在定义好路由及实际的逻辑代码之后,我们需要在项目根目录并通过命令行运行 php bin/hyperf.php start 来启动服务。

  Ⅳ当 Console 界面显示服务启动后便可通过 cURL 或 浏览器对服务正常发起访问了,默认服务会提供一个首页

  Ⅴ对于本章示例引导的情况下,也就是上面的例子所对应的访问地址为

  Ⅵ重新加载代码由于 Hyperf 是持久化的 CLI 应用,也就意味着一旦进程启动,已解析的 PHP

  Ⅶ代码会持久化在进程中,也就意味着启动服务后您再修改的 PHP 代码不会改变已启动的服务,如您希望服务重新加载您修改后的代码,您需要通过在启动的 Console

  Ⅷ中键入 CTRL + C 终止服务,再重新执行启动命令 php bin/hyperf.php start 完成启动和重新加载。

  ⅨTips: 您也可以将启动 Server 的命令配置在 IDE 上,便可直接通过 IDE 的 启动/停止 操作快捷的完成 启动服务 或 重启服务

  Ⅹ的操作。 且非视图开发时可以采用 TDD(Test-Driven Development)

  ㈠测试驱动开发来进行开发,这样不仅可以省略掉服务重启和频繁切换窗口的麻烦,还可保证接口数据的正确性。

  ㈡另外,在文档 协程组件库 一章中提供了多种由社区开发者支持的 热更新/热重载 的解决方案,如仍希望采用 热更新/热重载 方案可再深入了解。

  ㈢多端口监听Hyperf 支持监听多个端口,但因为 callbacks 中的对象直接从容器中获取,所以相同的

  ㈣HyperfHttpServerServer::class 会在容器中被覆盖。所以我们需要在依赖关系中,重新定义 Server,确保对象隔离。

  ㈤WebSocket 和 TCP 等 Server 同理。

  ㈥同时 路由文件,或者 注解 也需要指定对应的 server,如下:

  ㈦路由文件 config/routes.php

  ㈧事件除上述提到的 Event::ON_REQUEST 事件,框架还支持其他事件,所有事件名如下。

  ㈨v.. - --修复

  ㈩修复当使用 Arr::fet 方法在 key 为 integer 且不存在时,执行报错的问题。

  # 修复 hyperf/validation 组件中,FormRequest 无法从协程上下文中获取到修改后的

  ServerRequest,从而导致验证器验证失败的问题。

  # 修复 hyperf/testing 组件中,客户端 HyperfTestingClient 无法模拟构造正常的

  UriInterface 的问题。

  # 修复在入口文件 bin/hyperf.php 中自定义的常量,无法在命令 server:watch 中使用的问题。

  # 修复当使用协程风格服务时,如果用户没有配置 pid_file,仍然会意外生成 runtime/hyperf.pid 文件的问题。

  优化# 优化命令 phar:build,你可以在不使用 php 脚本的情况下执行 phar 文件,就像使用命令

  而非 php poser.phar。

  # 优化使用 gen:model 生成模型字段的类型注释时,尽量读取自定义转换器转换后的对量类型。

  v.. - --修复# 修复使用 JsonEofPacker 无法正确解包自定义 eof 数据的问题。

  # 修复因其他协程修改静态变量 $constraints,导致模型关系查询错误的问题。

  新增# 为 Crontab 注解增加 enable 参数,用于控制当前任务是否注册到定时任务中。

  优化# 优化了 testing 组件,使模拟请求的方法运行在独立的协程当中,避免协程变量污染。

  v.. - --修复# 修复 hyperf/cache 组件,当没有在注解中设置超时时间时,会将超时时间强制转化为

  ,导致缓存不失效的问题。

  新增# 新增方法 Blueprint::ment(),可以允许在使用 Migration 的时候,设置表注释。

  # 新增方法 RouteCollector::getRouteParser,可以方便的从 RouteCollector 中获取到

  RouteParser 对象。

  # 允许用户在 hyperf/db 组件中,注册自定义数据库适配器。

  优化# 优化 WebSocket 服务,当找不到对应路由时,直接返回响应。

  # 优化从连接池获取连接的代码逻辑,避免因重写低频组件导致报错,使得连接被意外丢弃。

  新组件孵化rpc-multiplex 基于 Channel 实现的多路复用 RPC 组件。

  db-pgsql 适配于 hyperf/db 的 PgSQL 适配器。