GRPC知识总结
GRPC的底层传输协议是HTTP2,而在HTTP2里引入了帧的概念,它是数据传输的最小单位,实现了将普通的请求/响应,拆解为帧实现请求和响应
并发,在HTTP2中规定了10中类型的帧,如:
HEADER帧
DATA帧
数据帧和头帧的用途:
当客户端发起请求时,先发送头帧,里面包含要执行的方法等信息,
服务端同意客户端的请求后,客户端再发送数据帧,里面包含具体的参数值
等服务端完成客户端的请求后,需要重新创建头帧,将执行结果的基本情况封装到头帧里,传给客户端
服务端再将执行结果封装成数据帧,传给客户端
一次rpc请求只会产生一个数据帧,如果此帧的大小超过帧发送器允许本次发送的最大字节数,就会将此帧进行拆分发出去
这个数据帧是grpc框架自己的帧,如果这个帧大小超过了http2包的数据帧大小的话,grpc会将其拆分成多个http2类型的数据帧来发送
一条连接里可以有多个stream,一个stream里有多个帧
客户端每发起一次SayHello请求,都会创建一个stream
每个stream都会有一个ID号,从1、3.5.7开始,一直到int类型的最大值,流ID为0时,表示传输的是设置帧
当客户端和服务端只有一个连接时,多次rpc请求会产生多次流,这些流共享同一个连接,达到多路复用的效果
当客户端和服务端只有多个连接时,会由客户端的平衡器中的picker来决定流会使用哪个连接来传输
每一个连接对应有一个帧发送器、帧接收器
GRPC会将自己框架定义的帧转换为HTTP2里的帧进行传输
GRPC有两种拦截器,一种是UnaryServerInterceptor,一种是StreamServerInterceptor,前者用来处理一次请求/响应,后者用来处理流式响应。