当前位置: 首页 > 工具软件 > Hyperf > 使用案例 >

hyperf笔记

公良照
2023-12-01

1、注解

给程序看的

可以看出是一种特殊的标记 一般用来标记 类 方法 接口

当这些注解在被读取到后,就会被放进容器中,然后利用php反射技术去解析这些注解,根据对应的信息去做对应的处理

@controller

requestmapping  get post patch

inject value

2、依赖自动注入

通过构造函数注入

通过@inject注解注入

1.通过inject注解注入

不需要new实例化

类对象就会自己主动注入

好处是:

如果类对象存在很多依赖,这些依赖又存在着依赖的时候,手动new就会很麻烦

唔需要手动去管理这些依赖,只需要声明一下最终使用的类

2.IOC和DI

IOC控制反转

把对象的调用权交给容器(方法),通过容器来实现对对象的管理

反转:

反转的是依赖的对象

对象1在运行到需要对象2的时候,ioc容器会自动创建一个对象2注入到对象1的地方

以前是需要对象1自己去创建对象2的

借助于第三方,可以让原本有着相互依赖关系的对象解耦

它的作用是为了方便管理创建的实例对象,本质是以key-value数组格式保存类的实例对象

key作为标识,value作为功能的提供者

DI依赖注入

DI是对IOC更完善的描述

容器动态地将依赖关系注入到对象中

某个类或者方法,不需要new实例化,只需要通过inject注入,最后再声明下,就可以在对象中使用这个类。

3、面向切面 AOP

核心思想就是把模块中共同的业务,单独提取出来,单独构建一层,主要为了业务的拆分,解耦

被切入的类由DI管理

应用场景:中间件   事件    钩子  代理类缓存

中间件:

跨域

参数

签名

中间件 && 面向切面区别

面向切面可以模糊匹配

面向切面在类的方法里面

中间件过滤进入到应用的http请求 路由层

4、json_rpc

远程方法调用

运行在两台不同物理机上

在分布式微服务系统中

安装:

composer.json引入

hyperf/json-rpc

hyperf/rpc-server

hyperf/rpc-client

rpc实现原理:

远程调用过程中,会涉及到网络链接,进行网络通信,进行网络传输

1.建立网络连接

通过tcp建立连接

2.网络通信

开发协议

通信协议解决客户端和服务端采用哪种数据传输协议的问题

3.网络传输

序列化 反序列化

服务端如何处理请求

1.同步阻塞

客户端发起一个请求,服务端就需要生成对应的线程去处理,一个线程处理一次请求

当达到系统最大的线程数时,新的请求就无法处理了

2.同步非阻塞

客户端发起一个请求,服务端并不是每次都创建线程去处理,而是通过io多路复用技术,把多个请求复用到同一个select上,达到一个线程处理多个请求。

3.异步非阻塞

客户端发起请求后,会立即接收到信息。

等io操作完成后,客户端就会得到操作完成的通知。

5、协程

同步阻塞

异步非阻塞

1.同步阻塞

php-fpm

是一个多进程的fastcgi管理程序,大部分php都是使用这个运行模式

是一种阻塞等待的工作模型

运行模式:

客户端请求

ngnix

通过fastcgi协议

php-fpm处理

一般有多少个worker进程就会处理多少个请求

2.异步非阻塞

协程

协程上下文:

不能通过全局变量来存储状态

因为一个worker会在一个时间周期内,处理多个协程的

使用协程上下文,可以避免协程间数据的混淆

运用场景:

用户查询

游戏查询

6、异常处理

注册异常处理器

定义异常处理器

定义异常处理类

触发异常

error监听器

1.定义异常处理器

判断是否希望被捕获到异常

阻止异常冒泡

2.触发异常

抛出异常

7、ORM

hasone   belongsTo

8、事件机制

场景:

用户注册成功后,给用户发送短息

三个角色:

事件

事件监听器

事件调度器

1.事件

一个事件其实就是一个用于管理状态数据的普通类

2.事件调度器

事件调度器触发时会将应用数据传递到事件里

事件 需要 通过 事件调度器 调度 才能让 监听器 监听到

3.监听器

监听器 会对 事件类进行操作

        

9、JWT理解 / 单点登录

用户身份验证流程:

客户端发送用户名 密码 请求登录

服务端收到后,需要去做验证

验证成功后,服务端会发送一个token,会把这个token返回给到客户端

这个token = 用户的信息作为JWT的Payload,将其与JWT header分别进行base64 拼接后签名

客户端接收到token后,会存储起来,比如放在cookie,但一般放在redis

这样,客户端每次请求服务端,都需要携带token,可以在cookie或者在header中携带

服务器接收到请求后,会验证客户端携带的token,通过后,就会返回请求数据

优点与传统的seesion认证的区别

支持跨域访问

服务端不需要存储session信息,无状态

分布式系统中,传统session方式会失效

更适用于移动端

无需考虑CSRF

JWT 和 Oauth2 比较

JWT

认证协议

用户提供用户名和密码给服务器验证

Oauth2

授权框架

JWT结构

header标头

payload有效荷载

signature签名

在传输的时候,会将JWT这三个部分,分别进行base64后,用 . 拼接成最终传输的字符串

 类似资料: