gRPC客户端创建和调用原理解析(6)

gRPC客户端创建和调用原理解析

2.5.2. RPC响应接收和处理源码分析

响应消息的接收入口是NettyClientHandler,包括HTTP/2 Header和HTTP/2 DATA Frame两部分,代码如下:

(点击放大图像)

gRPC客户端创建和调用原理解析

如果参数endStream为True,说明Stream已经结束,调用transportTrailersReceived,通知Listener close,代码如下所示:

(点击放大图像)

gRPC客户端创建和调用原理解析

读取到HTTP/2 DATA Frame之后,调用MessageDeframer的deliver对Frame进行解析,代码如下:

(点击放大图像)

gRPC客户端创建和调用原理解析

将Frame 转换成InputStream之后,通知ClientStreamListenerImpl,调用messageRead(final InputStream message),将InputStream反序列化为响应对象,相关代码如下所示:

(点击放大图像)

gRPC客户端创建和调用原理解析

当接收到endOfStream之后,通知ClientStreamListenerImpl,调用它的close方法,如下所示:

(点击放大图像)

gRPC客户端创建和调用原理解析

最终调用UnaryStreamToFuture的onClose方法,set响应对象,唤醒阻塞的调用方线程,完成RPC调用,代码如下:

(点击放大图像)

gRPC客户端创建和调用原理解析

3. 作者简介

李林锋,华为软件平台开放实验室架构师,有多年Java NIO、平台中间��、PaaS平台、API网关设计和开发经验。精通Netty、Mina、分布式服务框架、云计算等,目前从事软件公司的API开放相关的架构和设计工作。

联系方式:新浪微博 Nettying 微信:Nettying

Email:neu_lilinfeng@sina.com

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13469.html