mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-11-30 02:37:58 +08:00
Update docs
This commit is contained in:
parent
fecdb5034d
commit
9821c9db87
@ -1,8 +1,8 @@
|
||||
# 2.0 介绍
|
||||
# 2.1 介绍
|
||||
|
||||
Hyperf 是基于 `Swoole 4.5+` 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 `PHP-FPM` 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 [PSR 标准](https://www.php-fig.org/psr) 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 `可替换` 与 `可复用` 的。
|
||||
|
||||
框架组件库除了常见的协程版的 `MySQL 客户端`、`Redis 客户端`,还为您准备了协程版的 `Eloquent ORM`、`WebSocket 服务端及客户端`、`JSON RPC 服务端及客户端`、`GRPC 服务端及客户端`、`Zipkin/Jaeger (OpenTracing) 客户端`、`Guzzle HTTP 客户端`、`Elasticsearch 客户端`、`Consul 客户端`、`ETCD 客户端`、`AMQP 组件`、`Apollo 配置中心`、`阿里云 ACM 应用配置管理`、`ETCD 配置中心`、`基于令牌桶算法的限流器`、`通用连接池`、`熔断器`、`Swagger 文档生成`、`Swoole Tracker`、`视图引擎`、`Snowflake 全局 ID 生成器` 等组件,省去了自己实现对应协程版本的麻烦。
|
||||
|
||||
框架组件库除了常见的协程版的 `MySQL 客户端`、`Redis 客户端`,还为您准备了协程版的 `Eloquent ORM`、`WebSocket 服务端及客户端`、`JSON RPC 服务端及客户端`、`GRPC 服务端及客户端`、`Zipkin/Jaeger (OpenTracing) 客户端`、`Guzzle HTTP 客户端`、`Elasticsearch 客户端`、`Consul 客户端`、`ETCD 客户端`、`AMQP 组件`、`Apollo 配置中心`、`阿里云 ACM 应用配置管理`、`ETCD 配置中心`、`基于令牌桶算法的限流器`、`通用连接池`、`熔断器`、`Swagger 文档生成`、`Swoole Tracker`、`视图引擎`、`Snowflake 全局 ID 生成器` 等组件,省去了自己实现对应协程版本的麻烦。
|
||||
|
||||
Hyperf 还提供了 `基于 PSR-11 的依赖注入容器`、`注解`、`AOP 面向切面编程`、`基于 PSR-15 的中间件`、`自定义进程`、`基于 PSR-14 的事件管理器`、`Redis/RabbitMQ 消息队列`、`自动模型缓存`、`基于 PSR-16 的缓存`、`Crontab 秒级定时任务`、`国际化`、`Validation 表单验证器` 等非常便捷的功能,满足丰富的技术场景和业务场景,开箱即用。
|
||||
|
||||
@ -13,9 +13,9 @@ Hyperf 还提供了 `基于 PSR-11 的依赖注入容器`、`注解`、`AOP 面
|
||||
# 设计理念
|
||||
|
||||
`Hyperspeed + Flexibility = Hyperf`,从名字上我们就将 `超高速` 和 `灵活性` 作为 Hyperf 的基因。
|
||||
|
||||
- 对于超高速,我们基于 Swoole 协程并在框架设计上进行大量的优化以确保超高性能的输出。
|
||||
- 对于灵活性,我们基于 Hyperf 强大的依赖注入组件,组件均基于 [PSR 标准](https://www.php-fig.org/psr) 的契约和由 Hyperf 定义的契约实现,达到框架内的绝大部分的组件或类都是可替换的。
|
||||
|
||||
- 对于超高速,我们基于 Swoole 协程并在框架设计上进行大量的优化以确保超高性能的输出。
|
||||
- 对于灵活性,我们基于 Hyperf 强大的依赖注入组件,组件均基于 [PSR 标准](https://www.php-fig.org/psr) 的契约和由 Hyperf 定义的契约实现,达到框架内的绝大部分的组件或类都是可替换的。
|
||||
|
||||
基于以上的特点,Hyperf 将存在丰富的可能性,如实现 Web 服务,网关服务,分布式中间件,微服务架构,游戏服务器,物联网(IOT)等。
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
## 概念
|
||||
|
||||
AOP 为 `Aspect Oriented Programming` 的缩写,意为:`面向切面编程`,通过动态代理等技术实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,也是 Hyperf 中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
|
||||
AOP 为 `Aspect Oriented Programming` 的缩写,意为:`面向切面编程`,通过动态代理等技术实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,也是 Hyperf 中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
|
||||
|
||||
用通俗的话来讲,就是在 Hyperf 里可以通过 `切面(Aspect)` 介入到任意类的任意方法的执行流程中去,从而改变或加强原方法的功能,这就是 AOP。
|
||||
|
||||
@ -34,13 +34,13 @@ use Hyperf\Di\Aop\ProceedingJoinPoint;
|
||||
*/
|
||||
class FooAspect extends AbstractAspect
|
||||
{
|
||||
// 要切入的类,可以多个,亦可通过 :: 标识到具体的某个方法,通过 * 可以模糊匹配
|
||||
// 要切入的类或 Trait,可以多个,亦可通过 :: 标识到具体的某个方法,通过 * 可以模糊匹配
|
||||
public $classes = [
|
||||
SomeClass::class,
|
||||
'App\Service\SomeClass::someMethod',
|
||||
'App\Service\SomeClass::*Method',
|
||||
];
|
||||
|
||||
|
||||
// 要切入的注解,具体切入的还是使用了这些注解的类,仅可切入类注解和类方法注解
|
||||
public $annotations = [
|
||||
SomeAnnotation::class,
|
||||
@ -60,7 +60,7 @@ class FooAspect extends AbstractAspect
|
||||
|
||||
每个 `切面(Aspect)` 必须定义 `@Aspect` 注解或在 `config/autoload/aspects.php` 内配置均可发挥作用。
|
||||
|
||||
> 使用 `@Aspect` 注解时需 `use Hyperf\Di\Annotation\Aspect;` 命名空间;
|
||||
> 使用 `@Aspect` 注解时需 `use Hyperf\Di\Annotation\Aspect;` 命名空间;
|
||||
|
||||
您也可以通过 `@Aspect` 注解本身的属性来完成切入目标的配置,通过下面注解的形式可以达到与上面的示例一样的目的:
|
||||
|
||||
@ -100,12 +100,10 @@ class FooAspect extends AbstractAspect
|
||||
}
|
||||
```
|
||||
|
||||
> 2.0.3 及以上版本已经可以支持切入 Trait,但要求 PHP 版本 >= 7.3。
|
||||
|
||||
## 代理类缓存
|
||||
|
||||
所有被 AOP 影响的类,都会在 `./runtime/container/proxy/` 文件夹内生成对应的 `代理类缓存`,是否在启动时自动生成取决于 `config/config.php` 配置文件中 `scan_cacheable` 配置项的值,默认值为 `false`,如果该配置项为 `true` 则 Hyperf 不会扫描和生成代理类缓存,而是直接以现有的缓存文件作为最终的代理类。如果该配置项为 `false`,则 Hyperf 会在每次启动应用时扫描注解扫描域并自动的生成对应的代理类缓存,当代码发生变化时,代理类缓存也会自动的重新生成。
|
||||
|
||||
通常在开发环境下,该值为 `false`,这样更便于开发调试,而在部署生产环境时,我们可能会希望 Hyperf 提前将所有代理类提前生成,而不是使用时动态的生成,可以通过 `php bin/hyperf.php` 命令来生成所有代理类,然后再通过环境变量 `SCAN_CACHEABLE` 为 `true` 修改该配置项的值,以达到启动时间更短、应用内存占用更低的目的。
|
||||
通常在开发环境下,该值为 `false`,这样更便于开发调试,而在部署生产环境时,我们可能会希望 Hyperf 提前将所有代理类提前生成,而不是使用时动态的生成,可以通过 `php bin/hyperf.php` 命令来生成所有代理类,然后再通过环境变量 `SCAN_CACHEABLE` 为 `true` 修改该配置项的值,以达到启动时间更短、应用内存占用更低的目的。
|
||||
|
||||
基于以上,如果您使用 Docker 或 Kubernetes 等虚拟化技术来部署您的应用的话,您可以在镜像构建阶段就生成对应的代理类缓存并写入到镜像中去,在运行镜像实例时,可大大减少启动时间和应用内存。
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 协程组件库
|
||||
|
||||
所有官方提供的组件库均已进行协程化处理,可安全地在 Hyperf 内或其它协程框架内使用,基于 Hyperf 的开放性和可扩展性,社区可对此开发或适配各种各样的组件,得益于此,Hyperf 将存在着无限的可能性。
|
||||
所有官方提供的组件库均已进行协程化处理,可安全地在 Hyperf 内或其它协程框架内使用,基于 Hyperf 的开放性和可扩展性,社区可对此开发或适配各种各样的组件,得益于此,Hyperf 将存在着无限的可能性。
|
||||
本页将收录各个适配了 Hyperf 的协程组件 和 已经经过验证可安全地用于协程下的常用库,以便您快速的从中选择合适的组件完成您的需求。
|
||||
|
||||
> 组件顺序以收录时间排序
|
||||
@ -35,7 +35,7 @@
|
||||
## 数据库
|
||||
|
||||
- [hyperf/database](https://github.com/hyperf/database) Hyperf 官方提供的基于 Eloquent 衍生的数据库 ORM,可复用于其它框架
|
||||
- [hyperf/model](https://github.com/hyperf/model) Hyperf 官方提供的基于 [hyperf/database](https://github.com/hyperf/database) 组件的自动模型缓存组件
|
||||
- [hyperf/model](https://github.com/hyperf/model) Hyperf 官方提供的基于 [hyperf/database](https://github.com/hyperf/database) 组件的自动模型缓存组件
|
||||
- [reasno/fastmongo](https://github.com/Reasno/fastmongo) 基于 `hyperf/gotask` 实现的协程化 `MongoDB` 客户端
|
||||
- [hyperf-ext/translatable](https://github.com/hyperf-ext/translatable) 为模型提供多语言能力
|
||||
|
||||
@ -106,11 +106,11 @@
|
||||
|
||||
## 热更新/热重载
|
||||
|
||||
- [hyperf/watcher](zh-cn/watcher.md) 官方热更新组件
|
||||
- [ha-ni-cc/hyperf-watch](https://github.com/ha-ni-cc/hyperf-watch) 一个基于 Swoole 实现的通用热更新组件
|
||||
- [mix-php/swoolefor](https://github.com/mix-php/swoolefor) 一个由 Mixphp 实现的通用热更新组件
|
||||
- [buexplain/go-watch](https://github.com/buexplain/go-watch) 一个基于 Go 语言实现的通用热更新组件
|
||||
- [remy/nodemon](https://github.com/remy/nodemon) 一个基于 node.js 实现的通用热更新组件
|
||||
- [hyperf/watcher](zh-cn/watcher.md) 适配于 `Hyperf 2.0` 的热更新组件
|
||||
|
||||
> Warning: 请勿于生产环境使用 `热更新/热重载` 功能
|
||||
|
||||
|
@ -27,7 +27,7 @@ php bin/hyperf.php gen:command FooCommand
|
||||
|
||||
### 定义命令
|
||||
|
||||
定义该命令类所对应的命令有两种形式,一种是通过 `$name` 属性定义,另一种是通过构造函数传参来定义,我们通过代码示例来演示一下,假设我们希望定义该命令类的命令为 `foo:hello`:
|
||||
定义该命令类所对应的命令有两种形式,一种是通过 `$name` 属性定义,另一种是通过构造函数传参来定义,我们通过代码示例来演示一下,假设我们希望定义该命令类的命令为 `foo:hello`:
|
||||
|
||||
#### `$name` 属性定义:
|
||||
|
||||
@ -74,7 +74,7 @@ class FooCommand extends HyperfCommand
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('foo:hello');
|
||||
parent::__construct('foo:hello');
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -104,7 +104,7 @@ class FooCommand extends HyperfCommand
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'foo:hello';
|
||||
|
||||
|
||||
public function handle()
|
||||
{
|
||||
// 通过内置方法 line 在 Console 输出 Hello Hyperf.
|
||||
@ -150,7 +150,7 @@ class FooCommand extends HyperfCommand
|
||||
$argument = $this->input->getArgument('name') ?? 'World';
|
||||
$this->line('Hello ' . $argument, 'info');
|
||||
}
|
||||
|
||||
|
||||
protected function getArguments()
|
||||
{
|
||||
return [
|
||||
@ -158,7 +158,7 @@ class FooCommand extends HyperfCommand
|
||||
];
|
||||
}
|
||||
}
|
||||
```
|
||||
```
|
||||
|
||||
执行 `php bin/hyperf.php foo:hello Hyperf` 我们就能看到输出了 `Hello Hyperf` 了。
|
||||
|
||||
@ -363,8 +363,6 @@ array(2) {
|
||||
|
||||
命令行除了上述配置方法外,还支持使用 `$signature` 配置。
|
||||
|
||||
> 需要 command 版本 >= 2.0.5
|
||||
|
||||
`$signature` 为字符串,分为三部分,分别是 `command` `argument` 和 `option`,如下:
|
||||
|
||||
```
|
||||
|
@ -9,7 +9,7 @@ class ErrorCode
|
||||
{
|
||||
const SERVER_ERROR = 500;
|
||||
const PARAMS_INVALID = 1000;
|
||||
|
||||
|
||||
public static $messages = [
|
||||
self::SERVER_ERROR => 'Server Error',
|
||||
self::PARAMS_INVALID => '参数非法'
|
||||
@ -38,8 +38,6 @@ composer require hyperf/constants
|
||||
php bin/hyperf.php gen:constant ErrorCode
|
||||
```
|
||||
|
||||
!> 此生成命令仅在 [hyperf/constants](https://github.com/hyperf/constants) 组件版本大于等于 v2.0.1 版本时可用,小于此版本时请手动创建枚举类。
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
|
@ -127,8 +127,6 @@ composer dump-autoload -o
|
||||
|
||||
> 当环境变量存在 SCAN_CACHEABLE 时,.env 中无法修改这个配置。
|
||||
|
||||
`2.0.0` 和 `2.0.1` 两个版本,判断文件是否修改时,没有判断修改时间相等的情况,所以文件修改后,立马生成缓存的情况(比如使用 `watcher` 组件时), 会导致代码无法及时生效。
|
||||
|
||||
## 语法错误导致服务无法启动
|
||||
|
||||
当项目启动时,抛出类似于以下错误时
|
||||
@ -139,7 +137,7 @@ Fatal error: Uncaught PhpParser\Error: Syntax error, unexpected T_STRING on line
|
||||
|
||||
可以执行脚本 `composer analyse`,对项目进行静态检测,便可以找到出现问题的代码段。
|
||||
|
||||
此问题通常是由于 [zircote/swagger](https://github.com/zircote/swagger-php) 的 3.0.5 版本更新导致, 详情请见 [#834](https://github.com/zircote/swagger-php/issues/834) 。
|
||||
此问题通常是由于 [zircote/swagger](https://github.com/zircote/swagger-php) 的 3.0.5 版本更新导致, 详情请见 [#834](https://github.com/zircote/swagger-php/issues/834) 。
|
||||
如果安装了 [hyperf/swagger](https://github.com/hyperf/swagger) 建议将 [zircote/swagger](https://github.com/zircote/swagger-php) 的版本锁定在 3.0.4
|
||||
|
||||
## 内存限制太小导致项目无法运行
|
||||
@ -155,14 +153,3 @@ php --ini
|
||||
# 修改 memory_limit 配置
|
||||
memory_limit=-1
|
||||
```
|
||||
|
||||
## Hyperf 版本从 `2.0.18` 之前版本升级之后, 提示 `Call to undefined method Hyperf\Utils\Arr::merge()`
|
||||
|
||||
原因是 `doctrine/common` 组件导致的 `hyperf/utils` 组件无法升级。执行以下命令移除 `doctrine/common` 组件,重新更新 Hyperf 相关组件即可。
|
||||
|
||||
```bash
|
||||
# 移除组件
|
||||
composer remove doctrine/common
|
||||
# 更新
|
||||
composer update "hyperf/*" -o
|
||||
```
|
||||
|
@ -111,10 +111,21 @@ return [
|
||||
|
||||
因为组件 `hyperf/paginator` 已从 `hyperf/database` 依赖中移除。所以在 database 中使用到分页器的同学,还需要额外引入 `hyperf/paginator` 组件。
|
||||
|
||||
## 修改DBAL版本
|
||||
## 修改 DBAL 版本
|
||||
|
||||
倘若使用了 `doctrine/dbal` 组件,则需要升级到 `^3.0` 版本。
|
||||
|
||||
## 移除组件 doctrine/common
|
||||
|
||||
`doctrine/common` 组件与 `hyperf/utils` 存在依赖冲突。故需要从 `composer.json` 中移除此组件。
|
||||
|
||||
```bash
|
||||
# 移除组件
|
||||
composer remove doctrine/common
|
||||
# 更新
|
||||
composer update "hyperf/*" -o
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 尽量不要将老项目的引擎修改为 Swow,如果想要使用 Swow,请尽量在新项目中尝试。因为 Swow 并不是 Swoole 的替代品,所以并不是所有 Swoole 的场景,都能在 Swow 中找到对应的替代方案。
|
||||
|
Loading…
Reference in New Issue
Block a user