内容简介:本次更新涉及以下组件,主要新增了Hyperf 提供了对 WebSocket Server 的封装,可基于修改
v1.0.3 更新内容
本次更新涉及以下组件,主要新增了 WebSocket 服务端
及 WebSocket 协程客户端
组件,以及修复了一些 Bug hyperf/constants
hyperf/database
hyperf/di
hyperf/framework
hyperf/http-server
hyperf/json-rpc
hyperf/model-cache
hyperf/websocket-client
hyperf/websocket-server
Added
- #48 增加 WebSocket 协程客户端及服务端
-
#51
增加了
enableCache
餐快去控制DefinitionSource
是否启用注解扫描缓存 -
#61
通过
db:model
命令创建模型时增加属性类型 - #65 模型缓存增加 JSON 格式支持
Changed
-
#46
移除了
hyperf/di
,hyperf/command
andhyperf/dispatcher
组件对hyperf/framework
组件的依赖
Fixed
-
#45
修复当引用了
hyperf/websocket-server
组件时有可能会导致 HTTP Server 启动失败的问题 -
#55
修复方法级别的
@Middleware
注解可能会被覆盖的问题 -
#73
修复
db:model
命令对短属性处理不正确的问题 - #88 修复当控制器存在多层文件夹时生成的路由可能不正确的问题
-
#101
修复常量不存在
@Message
注解时会报错的问题
WebSocket 服务
Hyperf 提供了对 WebSocket Server 的封装,可基于 hyperf/websocket-server 组件快速搭建一个 WebSocket 应用。
安装
composer require hyperf/websocket-server
配置 Server
修改 config/autoload/server.php
,增加以下配置。
<?php 'servers' => [ [ 'name' => 'ws', 'type' => Server::SERVER_WEBSOCKET, 'host' => '0.0.0.0', 'port' => 9502, 'sock_type' => SWOOLE_SOCK_TCP, 'callbacks' => [ SwooleEvent::ON_HAND_SHAKE => [Hyperf\WebSocketServer\Server::class, 'onHandShake'], SwooleEvent::ON_MESSAGE => [Hyperf\WebSocketServer\Server::class, 'onMessage'], SwooleEvent::ON_CLOSE => [Hyperf\WebSocketServer\Server::class, 'onClose'], ], ], ],
配置路由
目前暂时只支持配置文件的模式配置路由,后续会提供注解模式。
在 config/routes.php
文件内增加对应 ws
的 Server 的路由配置,这里的 ws
值取决于您在 config/autoload/server.php
内配置的 WebSocket Server 的 name
值。
<?php Router::addServer('ws', function () { Router::get('/', 'App\Controller\WebSocketController'); });
创建对应控制器
<?php declare(strict_types=1); namespace App\Controller; use Hyperf\Contract\OnCloseInterface; use Hyperf\Contract\OnMessageInterface; use Hyperf\Contract\OnOpenInterface; use Swoole\Http\Request; use Swoole\Server; use Swoole\Websocket\Frame; class WebSocketController implements OnMessageInterface, OnOpenInterface, OnCloseInterface { public function onMessage(Server $server, Frame $frame): void { $server->push($frame->fd, 'Recv: ' . $frame->data); } public function onClose(Server $server, int $fd, int $reactorId): void { var_dump('closed'); } public function onOpen(Server $server, Request $request): void { $server->push($request->fd, 'Opened'); } }
接下来启动 Server,便能看到对应启动了一个 WebSocket Server 并监听于 9502 端口,此时您便可以通过各种 WebSocket Client 来进行连接和进行数据传输了。
$ php bin/hyperf.php start [INFO] Worker#0 started. [INFO] WebSocket Server listening at 0.0.0.0:9502 [INFO] HTTP Server listening at 0.0.0.0:9501
WebSocket 协程客户端
Hyperf 提供了对 WebSocket Client 的封装,可基于 hyperf/websocket-client 组件对 WebSocket Server 进行访问;
安装
composer require hyperf/websocket-client
使用
组件提供了一个 Hyperf\WebSocketClient\ClientFactory
来创建客户端对象 Hyperf\WebSocketClient\Client
,我们直接通过代码来演示一下:
<?php declare(strict_types=1); namespace App\Controller; use Hyperf\Di\Annotation\Inject; class IndexController extends Controller { /** * @Inject() * @var \Hyperf\WebSocketClient\ClientFactory */ protected $clientFactory; public function index() { // 对端服务的地址,如没有提供 ws:// 或 wss:// 前缀,则默认补充 ws:// $host = '127.0.0.1:9502'; // 通过 ClientFactory 创建 Client 对象,创建出来的对象为短生命周期对象 $client = $this->clientFactory->create($host); } }
自动关闭连接开关
默认情况下,创建出来的 Client
对象会通过 defer
自动 close
连接,如果您希望不自动 close
,可在创建 Client
对象时传递第二个参数 $autoClose
为 false
:
<?php $autoClose = false; $clientFactory->create($host, $autoClose);
关于 Hyperf
Hyperf 是基于 Swoole 4.3+
实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM
的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均均基于 PSR 标准
实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换
与 可复用
的。 框架组件库除了常见的协程版的 MySQL 客户端
、 Redis 客户端
,还为您准备了协程版的 Eloquent ORM
、 JSON RPC 服务的及客户端
、 GRPC 服务端及客户端
、 Zipkin (OpenTracing) 客户端
、 Guzzle HTTP 客户端
、 Elasticsearch 客户端
、 Consul 客户端
、 ETCD 客户端
、 AMQP 组件
、 Apollo 配置中心
、 阿里云 ACM 应用配置管理
、 基于令牌桶算法的限流器
、 通用连接池
、 熔断器
、 Swagger 文档生成
等组件,省去了自己实现对应协程版本的麻烦,Hyperf 还提供了 基于 PSR-11 的依赖注入容器
、 注解
、 AOP 面向切面编程
、 基于 PSR-15 的中间件
、 自定义进程
、 基于 PSR-14 的事件管理器
、 Redis/RabbitMQ 消息队列
、 自动模型缓存
、 基于 PSR-16 的缓存
等非常便捷的功能,满足丰富的技术场景和业务场景,开箱即用。
框架初衷
尽管现在基于 PHP 语言开发的框架处于一个百花争鸣的时代,但仍旧未能看到一个优雅的设计与超高性能的共存的完美框架,亦没有看到一个真正为 PHP 微服务铺路的框架,此为 Hyperf 及其团队成员的初衷,我们将持续投入并为此付出努力,也欢迎你加入我们参与开源建设。
设计理念
Hyperspeed + Flexibility = Hyperf
,从名字上我们就将 超高速
和 灵活性
作为 Hyperf 的基因。
- 对于超高速,我们基于 Swoole 协程并在框架设计上进行大量的优化以确保超高性能的输出。
- 对于灵活性,我们基于 Hyperf 强大的依赖注入组件,组件均基于 PSR 标准 的契约和由 Hyperf 定义的契约实现,达到框架内的绝大部分的组件或类都是可替换的。
基于以上的特点,Hyperf 将存在丰富的可能性,如实现 Web 服务,网关服务,分布式中间件,微服务架构,游戏服务器,物联网(IOT)等。
文档齐全
我们投入了大量的时间用于文档的建设,以解决各种因为文档缺失所带来的问题,文档上也提供了大量的示例,对新手同样友好。
生产可用
我们为组件进行了大量的单元测试以保证逻辑的正确,同时维护了高质量的文档,在 Hyperf 正式对外开放(2019年6月20日)之前,便已在一家 C轮 和一家 B轮 互联网公司上线了多个服务并以稳定的姿态完美的运行了超过半年时间,经过了严酷的生产环境 (如618) 的考验,我们才正式的对外开放该项目。
官网及交流
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Android快速开发框架,基础库,样式库,组件化,组件集成
- 框架组件,究竟要不要自研?
- Android组件化框架搭建
- Android组件化框架项目详解
- Web 组件即将取代前端框架?!| 技术头条
- 网易严选跨框架组件开发实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
世界是平的(3.0版)
[美] 托马斯·弗里德曼 / 何帆、肖莹莹、郝正非 / 湖南科学技术出版社 / 2008-9 / 58.00元
世界变得平坦,是不是迫使我们跑得更快才能拥有一席之地? 在《世界是平的》中,托马斯·弗里德曼描述了当代世界发生的重大变化。科技和通信领域如闪电般迅速的进步,使全世界的人们可以空前地彼此接近——在印度和中国创造爆炸式增长的财富;挑战我们中的一些人,比他们更快占领地盘。3.0版新增两章,更新了报告和注释方面的内容,这些内容均采自作者考察世界各地特别是整个美国中心地带的见闻,在美国本土,世界的平坦......一起来看看 《世界是平的(3.0版)》 这本书的介绍吧!
MD5 加密
MD5 加密工具
RGB CMYK 转换工具
RGB CMYK 互转工具