Hyperf 发布 v1.1.0 版本,企业级的 PHP 微服务云原生协程框架

huangzhhui
?huangzhhui
发布于 2019年10月08日
收藏 5

过去的3个半月

从 6月20日 Hyperf 1.0 发布以来,Hyperf 受到了非常多的关注,也获得了非常多的建议和帮助,截止至今, Hyperf 在 Github 上已经收获了?1330+ stars449+ 个 Pull Requests51+ Contributors3370+ commits,同时也出现了不少围绕或基于 Hyperf 的365bet手机版中文项目,在这段时间里,我们通过每周为 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 是一款非常优秀的365bet手机版中文的端对端分布式调用链追踪系统;
  • #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 文件内容如下:

  • #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 ORMWebSocket 服务端及客户端JSON RPC 服务端及客户端GRPC 服务端及客户端Zipkin (OpenTracing) 客户端Guzzle HTTP 客户端Elasticsearch 客户端Consul 客户端ETCD 客户端AMQP 组件Apollo 配置中心阿里云 ACM 应用配置管理ETCD 配置中心基于令牌桶算法的限流器通用连接池熔断器Swagger 文档生成Swoole TrackerBlade 和 Smarty 视图引擎Snowflake 全局ID生成器?等组件,省去了自己实现对应协程版本的麻烦。?

Hyperf 还提供了?基于 PSR-11 的依赖注入容器注解AOP 面向切面编程基于 PSR-15 的中间件自定义进程基于 PSR-14 的事件管理器Redis/RabbitMQ 消息队列自动模型缓存基于 PSR-16 的缓存Crontab 秒级定时任务国际化?等非常便捷的功能,满足丰富的技术场景和业务场景,开箱即用。

框架初衷

尽管现在基于 PHP 语言开发的框架处于一个百花争鸣的时代,但仍旧未能看到一个优雅的设计与超高性能的共存的完美框架,亦没有看到一个真正为 PHP 微服务铺路的框架,此为 Hyperf 及其团队成员的初衷,我们将持续投入并为此付出努力,也欢迎你加入我们参与365bet手机版中文建设。

设计理念

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 文档??

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创365bet手机版中文社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:Hyperf 发布 v1.1.0 版本,企业级的 PHP 微服务云原生协程框架
加载中

精彩评论

HenryGuo
HenryGuo
支持,已经在一个生产项目里采用hyperf了。

最新评论(2

HenryGuo
HenryGuo
支持,已经在一个生产项目里采用hyperf了。
返回顶部
顶部