RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者没必要显式的区分本地调用和远程调用,在前文《浅出篇》中给出了一种实现结构,基于 stub 的结构来实现。下面咱们将具体细化 stub 结构的实现。框架
RPC 调用分如下两种:异步
异步和同步的区分在因而否等待服务端执行完成并返回结果。分布式
《浅出篇》给出了一个比较粗粒度的 RPC 实现概念结构,这里咱们进一步细化它应该由哪些组件构成,以下图所示。编码
RPC 服务方经过 RpcServer
去导出(export)远程接口方法,而客户方经过 RpcClient
去引入(import)远程接口方法。客户方像调用本地方法同样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy
。代理封装调用信息并将调用转交给RpcInvoker
去实际执行。在客户端的RpcInvoker
经过链接器RpcConnector
去维持与服务端的通道RpcChannel
,并使用RpcProtocol
执行协议编码(encode)并将编码后的请求消息经过通道发送给服务方。代理
RPC 服务端接收器 RpcAcceptor
接收客户端的调用请求,一样使用RpcProtocol
执行协议解码(decode)。解码后的调用信息传递给RpcProcessor
去控制处理调用过程,最后再委托调用给RpcInvoker
去实际执行并返回调用结果。code