Hyperf 发布 v1.1.0 版本,企业级的 PHP 微服务云原生协程框架
过去的3个半月
从 6月20日 Hyperf 1.0 发布以来,Hyperf 受到了非常多的关注,也获得了非常多的建议和帮助,截止至今, Hyperf 在 Github 上已经收获了 1330+ stars
,449+ 个 Pull Requests
,51+ Contributors
,3370+ commits
,同时也出现了不少围绕或基于 Hyperf 的开源项目,在这段时间里,我们通过每周为 Hyperf 迭代一个无缝兼容的小版本,一共发布了 16 个小版本,此期间在 1.0 的基础上,增加了 Translation 国际化
, WebSocket
, Snowflake 全局唯一 ID 生成器
, Crontab 秒级计划任务
, ETCD 配置中心
, View 视图 (包括 Blade 和 Smarty 引擎)
, Task
, Swoole Tracker
共 8 个组件,同时也增加了 连接池根据频率自动释放连接、自动动态代理 JSON RPC 客户端,Hyperf\Utils\Context::override()
便捷的上下文变更方法,为 Response 增加 xml
download
方法等主要功能。
Hyperf 1.1
在社区力量的帮助下,以及我们日以继夜的努力,Hyperf 也在快速进化中,Hyperf 1.1 在国庆假期结束后的今天发布了,该版本为 Hyperf 增加了许多功能,也让 Hyperf 离理想的状态更加的靠近了,感谢所有的 Contributors,这个版本增加 Validation 验证器组件,Jaeger 调用链追踪组件,同时也强化了各个组件的使用和功能,同时也增加了大量的单测,从 1.0.16 版的 661
个单测共 2062
个断言条件提升至 1120
个单测共 3369
个断言条件,更多细节可以查阅下面的更新内容。
1.1 版本并不是一个兼容升级的版本,您需要简单的调整一下 skeleton 的部分结构,再将全部组件升级到 1.1 版本即可,我们为您准备了一个 v1.1 升级指南 供您参考,详情可查阅官方文档。
更新内容
新增
- #401 新增了
Hyperf\HttpServer\Router\Dispatched
对象来储存解析的路由信息,在用户中间件之前便解析完成以便后续的使用,同时也修复了路由里带参时中间件失效的问题; - #402 新增
@AsyncQueueMessage
注解,通过定义此注解在方法上,表明这个方法的实际运行逻辑是投递给 Async-Queue 队列去消费; - #418 允许发送 WebSocket 消息到任意的 fd,即使当前的 Worker 进程不持有对应的 fd,框架会自动进行进程间通讯来实现发送;
- #420 为数据库模型增加新的事件机制,与 PSR-15 的事件调度器相配合,可以解耦的定义 Listener 来监听模型事件;
- #429 #643 新增 Validation 表单验证器组件,这是一个衍生于 illuminate/validation 的组件,感谢 Laravel 开发组提供如此好用的验证器组件;
- #441 当 Redis 连接处于低使用频率的情况下自动关闭空闲连接;
- #478 更好地适配 OpenTracing 协议,同时接入了 Jaeger,Jaeger 是一款非常优秀的开源的端对端分布式调用链追踪系统;
- #500 为
Hyperf\HttpServer\Contract\ResponseInterface
增加链式方法调用支持,解决调用了代理方法的方法后无法再调用原始方法的问题; - #523 为
gen:model
命令新增了table-mapping
选项; - #555 新增了一个全局函数
swoole_hook_flags
来获取由常量SWOOLE_HOOK_FLAGS
所定义的 Runtime Hook 等级,您可以在bin/hyperf.php
通过! defined('SWOOLE_HOOK_FLAGS') && define('SWOOLE_HOOK_FLAGS', SWOOLE_HOOK_ALL);
的方式来定义该常量,即 Runtime Hook 等级; - #596 为
@Inject
注解增加了required
参数,当您定义@Inject(required=false)
注解到一个成员属性上,那么当该依赖项不存在时也不会抛出Hyperf\Di\Exception\NotFoundException
异常,而是以默认值null
来注入,required
参数的默认值为true
,当在构造器注入的情况下,您可以通过对构造器的参数定义为nullable
或将默认值设置为null
来达到同样的目的; - #597 为 AsyncQueue 组件的消费者增加
Concurrent
来控制消费速率; - #599 为 AsyncQueue 组件的消费者增加根据当前重试次数来设定该消息的重试等待时长的功能,可以为消息设置阶梯式的重试等待;
- #619 为 Guzzle 客户端增加 HandlerStackFactory 类,以便更便捷地创建一个 HandlerStack;
- #620 为 AsyncQueue 组件的消费者增加自动重启的机制;
- #629 允许通过配置文件的形式为 Apollo 客户端定义
clientIp
,pullTimeout
,intervalTimeout
配置; - #647 根据 server 的配置,自动为 TCP Response 追加
eof
; - #648 为 AMQP Consumer 增加
nack
的返回类型,当消费逻辑返回Hyperf\Amqp\Result::NACK
时抽象消费者会以basic_nack
方法来响应消息; - #654 增加所有 Swoole Event 的默认回调和对应的 Hyperf 事件;
变更
- #437
Hyperf\Testing\Client
在遇到异常时不再直接抛出异常而是交给 ExceptionHandler 流程处理; - #463 简化了
container.php
文件及优化了注解缓存机制;
新的 config/container.php 文件内容如下:
<?php use Hyperf\Di\Container; use Hyperf\Di\Definition\DefinitionSourceFactory; use Hyperf\Utils\ApplicationContext; $container = new Container((new DefinitionSourceFactory(true))()); if (! $container instanceof \Psr\Container\ContainerInterface) { throw new RuntimeException('The dependency injection container is invalid.'); } return ApplicationContext::setContainer($container);
- #486
Hyperf\HttpMessage\Server\Request
的getParsedBody
方法现在可以直接处理 JSON 格式的数据了; - #523 调整
gen:model
命令生成的模型类名默认为单数,如果表名为复数,则默认生成的类名为单数; - #614 #617 调整了 ConfigProvider 类的结构, 同时将
config/dependencies.php
文件移动到了config/autoload/dependencies.php
内,且文件结构去除了dependencies
层,此后也意味着您也可以将dependencies
配置写到config/config.php
文件内;
Config Provider 内数据结构的变化:
之前:
'scan' => [ 'paths' => [ __DIR__, ], 'collectors' => [], ],
现在:
'annotations' => [ 'scan' => [ 'paths' => [ __DIR__, ], 'collectors' => [], ], ],
增加了一层 annotations,这样将与配置文件结构一致,不再特殊
- #630 变更了
Hyperf\HttpServer\CoreMiddleware
类的实例化方式,使用make()
来替代了new
; - #631 变更了 AMQP Consumer 的实例化方式,使用
make()
来替代了new
; - #637 调整了
Hyperf\Contract\OnMessageInterface
和Hyperf\Contract\OnOpenInterface
的第一个参数的类型约束, 使用Swoole\WebSocket\Server
替代Swoole\Server
; - #638 重命名了
db:model
命令为gen:model
命令,同时增加了一个 Visitor 来优化创建的$connection
成员属性,如果要创建的模型类的$connection
属性的值与继承的父类一致,那么创建的模型类将不会包含此属性;
移除
- #401 移除了
Hyperf\JsonRpc\HttpServerFactory
,Hyperf\HttpServer\ServerFactory
,Hyperf\GrpcServer\ServerFactory
类; - #402 移除了弃用的
AsyncQueue::delay
方法; - #563 移除了弃用的
Hyperf\Server\ServerInterface::SERVER_TCP
常量,使用Hyperf\Server\ServerInterface::SERVER_BASE
来替代; - #602 移除了
Hyperf\Utils\Coroutine\Concurrent
的timeout
参数; - #612 移除了 RingPHP Handler 里没有使用到的
$url
变量; - #616 #618 移除了 Guzzle 里一些无用的代码;
优化
- #644 优化了注解扫描的流程,分开
app
和vendor
两部分来扫描注解,大大减少了用户的扫描耗时; - #653 优化了 Swoole shortname 的检测逻辑,现在的检测逻辑更加贴合 Swoole 的实际配置场景,不只是
swoole.use_shortname = "Off"
才能通过检测了;
修复
- #448 修复了当 HTTP Server 或 WebSocket Server 存在时,TCP Server 有可能无法启动的问题;
- #623 修复了当传递一个
null
值到代理类的方法参数时,方法仍然会获取方法默认值的问题;
关于 Hyperf
Hyperf 是基于 Swoole 4.4+
实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM
的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换
与 可复用
的。
框架组件库除了常见的协程版的 MySQL 客户端
、Redis 客户端
,还为您准备了协程版的 Eloquent ORM
、WebSocket 服务端及客户端
、JSON RPC 服务端及客户端
、GRPC 服务端及客户端
、Zipkin (OpenTracing) 客户端
、Guzzle HTTP 客户端
、Elasticsearch 客户端
、Consul 客户端
、ETCD 客户端
、AMQP 组件
、Apollo 配置中心
、阿里云 ACM 应用配置管理
、ETCD 配置中心
、基于令牌桶算法的限流器
、通用连接池
、熔断器
、Swagger 文档生成
、Swoole Tracker
、Blade 和 Smarty 视图引擎
、Snowflake 全局ID生成器
等组件,省去了自己实现对应协程版本的麻烦。
Hyperf 还提供了 基于 PSR-11 的依赖注入容器
、注解
、AOP 面向切面编程
、基于 PSR-15 的中间件
、自定义进程
、基于 PSR-14 的事件管理器
、Redis/RabbitMQ 消息队列
、自动模型缓存
、基于 PSR-16 的缓存
、Crontab 秒级定时任务
、国际化
等非常便捷的功能,满足丰富的技术场景和业务场景,开箱即用。
框架初衷
尽管现在基于 PHP 语言开发的框架处于一个百花争鸣的时代,但仍旧未能看到一个优雅的设计与超高性能的共存的完美框架,亦没有看到一个真正为 PHP 微服务铺路的框架,此为 Hyperf 及其团队成员的初衷,我们将持续投入并为此付出努力,也欢迎你加入我们参与开源建设。
设计理念
Hyperspeed + Flexibility = Hyperf
,从名字上我们就将 超高速
和 灵活性
作为 Hyperf 的基因。
- 对于超高速,我们基于 Swoole 协程并在框架设计上进行大量的优化以确保超高性能的输出。
- 对于灵活性,我们基于 Hyperf 强大的依赖注入组件,组件均基于 PSR 标准 的契约和由 Hyperf 定义的契约实现,达到框架内的绝大部分的组件或类都是可替换的。
基于以上的特点,Hyperf 将存在丰富的可能性,如实现 单体 Web 服务,API 服务,网关服务,分布式中间件,微服务架构,游戏服务器,物联网(IOT)等。
文档齐全
我们投入了大量的时间用于文档的建设,以解决各种因为文档缺失所带来的问题,文档上也提供了大量的示例,对新手同样友好。
Hyperf 官方开发文档
生产可用
我们为组件进行了大量的单元测试以保证逻辑的正确,目前存在 1120
个单测共 3369
个断言条件,同时维护了高质量的文档,在 Hyperf 正式对外开放(2019年6月20日)之前,便已经过了严酷的生产环境的考验,我们才正式的对外开放该项目,现在已有很多的大型互联网企业都已将 Hyperf 部署到了自己的生产环境上并稳定运行。
官网及交流
Github 👈👈👈👈👈 点 Star 支持我们
Gitee 码云 👈👈👈👈👈 点 Star 支持我们
Hyperf 官网
Hyperf 文档
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
smart-doc 1.7.0 重磅发布,Java 零注解文档生成工具
smart-doc是一个java restful api文档生成工具,smart-doc颠覆了传统类似swagger这种大量采用注解侵入来生成文档的实现方法。 smart-doc完全基于接口源码分析来生成接口文档,完全做到零注解侵入,你只需要按照java标准注释的写,smart-doc就能帮你生成一个简易明了的Markdown、Html、AsciiDoc文档。如果你已经厌倦了swagger等文档工具的无数注解和强侵入污染,那请拥抱smart-doc吧! 功能特性 零注解、零学习成本、只需要写标准java注释。 基于源代码接口定义自动推导,强大的返回结构推导。 支持Spring MVC,Spring Boot,Spring Boot Web Flux(controller书写方式)。 支持Callable,Future,CompletableFuture等异步接口返回的推导。 支持JavaBean上的JSR303参数校验规范。 对json请求参数的接口能够自动生成模拟json参数。 对一些常用字段定义能够生成有效的模拟值。 支持生成json返回值示例。 支持从项目外部加载源代码来生成字段...
- 下一篇
若依前后端分离版本 1.0 发布
基于SpringBoot + Vue的前后端分离权限管理系统。 下载地址RuoYi-Vue 如需不分离应用,请移步RuoYi(保持同步更新),如需其他版本,请移步项目扩展(不定时更新) 内置功能 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 岗位管理:配置系统用户所属担任职务。 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 参数管理:对系统动态配置常用参数。 通知公告:系统通知公告信息发布维护。 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 登录日志:系统登录日志记录查询包含登录异常。 在线用户:当前系统中活跃用户状态监控。 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 系统接口:根据业务代码自动生成相关的api接口文档。 服务监控:监视当前系统CPU...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境