(转)RPC原理详解
转自:http://www.open-open.com/lib/view/open1425797146897.html
RPC功能目标
RPC的主要功能目标是让构建分布式计算(应用)更加容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。
为实现该目标,RPC框架需提供一种透明的调用机制使使用者不必显式区分本地调用与远程调用
RPC调用分类:
RPC调用可以分为两种:
1)同步调用:客户方等待调用执行完成并返回执行结果
2)异步调用:客户方调用后不用等待执行结果返回,但依然可以通过回调方式获取执行结果
RPC结构拆解

RPC服务方通过RPCServer导出(export)远程接口方法,RPC客户方通过RPCClient导入(import)远程接口方法
客户方:
像调用本地方法一样调用远程接口方法,RPC框架实现接口的代理实现,实际的调用委托给代理RPCProxy
代理PRCProxy封装调用信息并将调用转交给PRCInvoker去实际执行
客户端的RPCInvoker通过连接器RPCConnector维持与服务端的通道RPCChannel,使用PRCProtocol执行协议编码,并将编码后的请求消息通过通道发送给服务方
服务方:
通过接收器RPCAcceptor接受客户端的调用请求,同样使用RPCProtocol执行协议解码
解码后的调用信息传递给RPCProcessor去控制处理调用过程
最后委托给PRCInvoker去实际执行调用并放回执行结果
各组件职责规划:
- RpcServer
负责导出(export)远程接口 - RpcClient
负责导入(import)远程接口的代理实现 - RpcProxy
远程接口的代理实现 - RpcInvoker
客户方实现:负责编码调用信息和发送调用请求到服务方并等待调用结果返回
服务方实现:负责调用服务端接口的具体实现并返回调用结果 - RpcProtocol
负责协议编/解码 - RpcConnector
负责维持客户方和服务方的连接通道和发送数据到服务方 - RpcAcceptor
负责接收客户方请求并返回请求结果 - RpcProcessor
负责在服务方控制调用过程,包括管理调用线程池、超时时间等 - RpcChannel
数据传输通道
(转)RPC原理详解的更多相关文章
- RPC原理详解
RPC 功能目标 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性. 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分 ...
- Spark2.1.0——内置RPC框架详解
Spark2.1.0——内置RPC框架详解 在Spark中很多地方都涉及网络通信,比如Spark各个组件间的消息互通.用户文件与Jar包的上传.节点间的Shuffle过程.Block数据的复制与备份等 ...
- Namenode HA原理详解(脑裂)
转自:http://blog.csdn.net/tantexian/article/details/40109331 Namenode HA原理详解 社区hadoop2.2.0 release版本开始 ...
- NFS原理详解
NFS原理详解 摘自:http://atong.blog.51cto.com/2393905/1343950 2013-12-23 12:17:31 标签:linux NFS nfs原理详解 nfs搭 ...
- Netty学习——服务器端代码和客户端代码 原理详解
服务器端代码和客户端代码 原理详解:(用到的API) 0.Socket 连接服务器端的套接字 1.TcompactProtocol 协议层2.TFrameTransport 传输层3.THsh ...
- sso单点登录原理详解
sso单点登录原理详解 01 单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务 ...
- php中流行的rpc框架详解
什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 我的官方群点击此处. 通常我们调用一个php中的方法,比如这样一个函数方 ...
- I2C 基础原理详解
今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...
- Zigbee组网原理详解
Zigbee组网原理详解 来源:互联网 作者:佚名2015年08月13日 15:57 [导读] 组建一个完整的zigbee网状网络包括两个步骤:网络初始化.节点加入网络.其中节点加入网络又包括两个 ...
随机推荐
- ios开发 数据库版本迁移手动更新迭代和自动更新迭代
数据库版本迁移顾名思义就是在原有的数据库中更新数据库,数据库中的数据保持不变对表的增.删.该.查. 数据持久化存储: plist文件(属性列表) preference(偏好设置) NSKeyedArc ...
- java Swing图形化界面
学过java的人应该对java的图形化界面很是反感,特别是接触java不久的人.如果想和其他语言那样用鼠标拖拽,可以使用wondosbulider插件.但是用起来也不是那么方便.当然对于不乐意写代码的 ...
- CentOS6.2下安装eclipse
在eclipse官网下载eclipse的linux版本(此处省略下载过程),我下载的是eclipse-jee-indigo-SR2-linux-gtk.tar.gz,下面是安装过程: 1.sudo ...
- android137 360 双击三击事件
package com.itheima52.doubleclick; import android.app.Activity; import android.os.Bundle; import and ...
- careercup-中等难度 17.4
17.4 编写一个方法,找出两个数字中最大的那一个.不得使用if-else或其他比较运算符. 解法: 我们可以通过一步步的分析来将需要用到的if-else和比较操作符去掉: If a > b, ...
- select option jquery javascript
jQuery获取Select选择的Text和Value: $('#myselect').find('option:selected').attr('ent_id'); $('#ent_id' ...
- eclipse创建项目时出现appcompat_v7包及解决办法
Android开发学习总结(三)--appcompat_v7项目说明 一.appcompat_v7项目说明 今天来说一下appcompat_v7项目的问题,使用eclipse创建Android项目时, ...
- Web安全测试周末公开班计划5月24、25日开课,欢迎报名参加!
Web安全测试周末公开班计划5月24.25日开课,欢迎报名参加! 课程大纲参考: http://gdtesting.com/product.php?id=107 报名咨询: 黎小姐 QQ:241448 ...
- jsp实现计算器
JavaBean package com.itheima.domain; import java.math.BigDecimal; public class BigDecimalDemo { priv ...
- Base64 编码
Base64 字母表 Base64 编码将一个 8 位字节序列拆成 6 位的片段,并为每个 6 位的片段分配一个字符,这个字符是 Base64 字母表中的 64 个字符之一. Wert Zeichen ...