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后,用 . 拼接成最终传输的字符串