理解RPC

一、实现RPC需要用到哪些技术?

       1.动态代理

         生成client stub 和 server stub 需要用到Java动态代理技术。比如:JDK动态代理,cglib,Javassist等。 

       2.序列化 为了能在网络上传输和接受Java对象,我们需要对它进行序列化和反序列化。 可以使用Java原生的序列化机制,但是效率度。也可以使用其他的,如:protobuf、Thrift、Hessian、Kryo、Msgpack。

         PS:(Hessian是一个轻量级的RPC框架。 它基于HTTP协议传输,使用Hessian二进制序列化,对于数据包比较大的情况比较友好。 但是它的参数和返回值都需要实现Serializable接口。)

       3.NIO 很多RPC框架都直接使用netty 作为通信框架,比如 HSF、dubbo、Avro。

       4.服务注册中心 Redis、Zookeeper、Consul、Etcd。

二、开源RPC框架:

       1.dubbo 阿里巴巴

       2.Motan 新浪微博 

       3.gRPC Google 基于HTTP/2协议 与 Protobuf 序列化协议。本身不是分布式,需要进一步开发。

       4.thrift Apache

三、RPC与RMI的区别  (这段是转载,原文地址:http://www.cnblogs.com/ygj0930/p/6542811.html 

       1:方法调用方式不同:  RMI中是通过在客户端的Stub对象作为远程接口进行远程方法的调用。每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口(stub)上,那么这个新方法就不能被RMI客户方所调用。   RPC中是通过网络服务协议向远程主机发送请求,请求包含了一个参数集和一个文本值,通常形成“classname.methodname(参数集)”的形式。RPC远程主机就去搜索与之相匹配的类和方法,找到后就执行方法并把结果编码,通过网络协议发回。  

       2:适用语言范围不同:    RMI只用于Java;    RPC是网络服务协议,与操作系统和语言无关。  

       3:调用结果的返回形式不同:     Java是面向对象的,所以RMI的调用结果可以是对象类型或者基本数据类型;     RMI的结果统一由外部数据表示 (External Data Representation, XDR) 语言表示,这种语言抽象了字节序类和数据类型结构之间的差异。 

四、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值