源码导航
注:内容翻译自grpc-java首页的 Navigating Around the Source。
从高水平上看,类库有三个不同的层: Stub/桩, Channel/通道 & Transport/传输.
Stub
Stub层暴露给大多数开发者,并提供类型安全的绑定到正在适应(adapting)的数据模型/IDL/接口。gRPC带有一个protocol-buffer编译器的 插件用来从.proto
文件中生成Stub接口。当然,到其他数据模型/IDL的绑定应该是容易添加并欢迎的。
关键接口
Channel
Channel层是传输处理之上的抽象,适合拦截器/装饰器,并比Stub层暴露更多行为给应用。它想让应用框架可以简单的使用这个层来定位横切关注点(address cross-cutting concerns)如日志,监控,认证等。流程控制也在这个层上暴露,容许更多复杂的应用来直接使用它交互。
Common
Client
Server
Transport
Transport层承担在线上放置和获取字节的繁重工作。它的接口被抽象到恰好刚刚够容许插入不同的实现。Transport被建模为Stream
工厂。server stream和client stream之间在接口上的存在差别以整理他们在取消和错误报告上的不同语义。
注意transport层的API被视为gRPC的内部细节,并比在package io.grpc
下的core API有更弱的API保证。
gRPC带有三个Transport实现:
- 基于Netty 的transport是主要的transport实现,基于Netty. 可同时用于客户端和服务器端。
- 基于OkHttp 的transport是轻量级的transport,基于OkHttp. 主要用于Android并只作为客户端。
- inProcess transport 是当服务器和客户端在同一个进程内使用使用。用于测试。