当前位置: 首页 > news >正文

hyperf知识问题汇总

 1、简单说下 hyperf(什么是 hyperf)

答:hyperf 是一个依赖swoole扩展的 php 开源开发框架,它由黄朝辉团队设计创建维护,具备简洁而强大的组件和超强的并发性能,而且还支持微服务架构,例如:服务注册、RPC、配置中心、服务监控、分布式事务。

2、使用hyperf框架需要注意些什么问题。

答:不能使用全局变量,因为下划线 get、post、server、session、cookie,因为这些都是基于传统的 php-fpm 下的 cgi模式下运行的,是基于进程的生命周期的,而 hyperf 具备协程并发功能,所以 hyperf 的 request、session、cookie 这些组件就不能依据进程的生命周期去设计,所以不能使用还有通过容器获取的类都是单例的和避免在魔术方法中切换协程,还有避免在魔术方法中切换协程。

3、hyperf 的生命周期

i分为全局周期和请求周期还有协程的运行周期,全局周期是服务启动到结束的,请求周期是是一个用户请求到结束,协程周期基本都是异步的,在业务代码层进行控制。

4、 请简述一下hyperf的协程

“Hyperf 的协程是一种轻量级的线程,它不由 CPU 直接调度,而是由用户态的调度器进行调度。协程的调度有一定规则,并非完全无序,在单线程内代码依然是串行执行的。当协程遇到阻塞操作时,会自动切换到其他协程继续执行,这也是 Swoole 提供很多异步 MySQL、Redis 等组件的原因。在协程模式下,与请求相关的数据可以通过 Request 对象获取,要避免使用传统的全局变量来存储请求数据。”

5、defer、waitgroup、parallel 特性

Parallel 和 waitgroup都是为了使协程编程变得更加人性化设计的,主要用途是让主线程等待所有的子线程都执行完再往下继续运行。Parallel可以设置协程运行最大数,防止协程创建太多导致服务宕机。

use Hyperf\Coroutine\Exception\ParallelExecutionException;
use Hyperf\Coroutine\Coroutine;
use Hyperf\Coroutine\Parallel;$parallel = new Parallel(5);
for ($i = 0; $i < 20; $i++) {$parallel->add(function () {sleep(1);return Coroutine::id();});
} try{$results = $parallel->wait(); 
} catch(ParallelExecutionException $e){// $e->getResults() 获取协程中的返回值。// $e->getThrowables() 获取协程中出现的异常。
}
6、hyperf 的事件机制

hyperf 支持事件的监听和定义,使用event组件实现,由 事件、监听器、事件调度器三部分组成。

开发流程就是,编写一个 监听和调度类,然后配置一下,在listen监听方法中添加要监听的类。

7、hyperf 的 aop 面向切面编程

aop编程思想主要是为了提高业务代码的可重用性,是面向对象的一种延生,在 hyperf 中使用Aspect来实现,$classes是切入的类和方法可以使用通配符,$annotations 是配置了注解的类,process方法是执行的逻辑。

8、hyperf 的路由

主要分为两种方式一种是配置文件配置,一种是注解方式配置,推荐注解方式,方便阅读和管理。

9、hyperf 的中间件

属于http-server组件的一部分功能,主要分为全局中间件和局部中间件,定义的方式有配置文件、路由配置和注解配置,执行顺序为 全局-类-方法。

10、hyperf controller

在编程时候需要注意不要 将单个请求相关的数据储存在类属性内,这样会出问题的,数据会混淆,可以使用协程上下文(Context)去实现。

11、hyperf 模型

使用了hyperf/db-connection它是基于hyperf/pool实现的数据库连接池。

http://www.lryc.cn/news/535095.html

相关文章:

  • 制药行业 BI 可视化数据分析方案
  • 【SVN基础】
  • 多项式插值(数值计算方法)Matlab实现
  • [AI]Mac本地部署Deepseek R1模型 — — 保姆级教程
  • android手机本地部署deepseek1.5B
  • 理解UML中的四种关系:依赖、关联、泛化和实现
  • 机器学习 - 词袋模型(Bag of Words)实现文本情感分类的详细示例
  • Kimi k1.5: Scaling Reinforcement Learning with LLMs
  • 如何评估云原生GenAI应用开发中的安全风险(下)
  • ASP.NET Core程序的部署
  • 《深度LSTM vs 普通LSTM:训练与效果的深度剖析》
  • Spring依赖注入方式
  • Photoshop自定义键盘快捷键
  • 解决VsCode的 Vetur 插件has no default export Vetur问题
  • 关于浏览器缓存的思考
  • Vue3+element-plus表单重置resetFields方法失效问题
  • 解释和对比“application/octet-stream“与“application/x-protobuf“
  • 1158:求1+2+3+...
  • 前端实现在PDF上添加标注(1)
  • 螺旋矩阵 II
  • 【愚公系列】《Python网络爬虫从入门到精通》001-初识网络爬虫
  • 【linux学习指南】模拟线程封装与智能指针shared_ptr
  • 10、Python面试题解析:解释reduce函数的工作原理
  • 【含开题报告+文档+PPT+源码】学术研究合作与科研项目管理应用的J2EE实施
  • MySQL主从复制过程,延迟高,解决应对策略
  • Deepseek模拟阿里面试——数据库
  • 大数据学习之SparkStreaming、PB级百战出行网约车项目一
  • Java 高频面试闯关秘籍
  • 边缘计算网关驱动智慧煤矿智能升级——实时预警、低延时决策与数字孪生护航矿山安全高效运营
  • Oracle认证大师(OCM)学习计划书