hessian、rmi、dubbo与rpc关系

hessian、rmi、dubbo与rpc之间的关系

单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)
RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式)
RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。

hessian、rmi、dubbo都是rpc的一种实现
rpc基于xdr
rmi是rpc的面向对象版实现
hessian是基于binary-rpc协议
dubbo是 基于Hessian二进制序列化


dubbo和hessiant特性

根据官方说明:Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况

Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务。适用场景:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。因此比较高效的做法是带上传下载文件的服务使用hessian协议,去普通的服务使用dubbo协议。

Hessian以InputStream 做参数注意事项

Hessian 以InputStream 做参数的原理:                                                                                                                             首先hessian要求inputstream 参数只能是参数列表中的最后一个,客户端顺序发送各个参数,直到最后一个inputstream对象,读取其内容,并写入输出流。
服务端获取到请求输入流后,按参数顺序进行反序列化,直到遇到类型为InputStream的参数时,创建一个InputStream对象,实现InputStream的接口,其行为是从 输入流读取数据,该对象返回给开发者后就可以自由读取流中剩余的数据了(也就是传参时从inputstream读取出的所有数据)。

对于返回值是InputStream的情况,有两种,一种是返回值就是一个InputStream对象,则服务端从中读取数据并写入输出流,和输入参数为InputStream的情况类似。
另一种是返回一个对象,对象中包含InputStream类型的字段,这时一定要注意,InputStream字段一定是所有非基本类型字段里的最后一个,原因同入参的情况一样。  另外就是inputstream类型字段不能超过1个。

猜你喜欢

转载自blog.csdn.net/qq_33314107/article/details/80975461