浅析RPC机制

来源:互联网 发布:软件安全测试方法 编辑:程序博客网 时间:2024/05/29 17:48

RPC远程过程调用协议

简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果

RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)

RPC 一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式

RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。


RPC & SOAP

1.RPC
如果要调用远端的一个方法,可以使用RMIRPC
RMI:(Remote Method Invocation) 直接获取远端方法的签名,进行调用

RPC: (Remote Procedure Call)采用客户端/服务器方式(请求/响应),发送请求到服务器端,服务端执行方法后返回结果


2.SOAP
为了包装
RPC的请求信息,推出了XML-RPC,但XML-RPC只能使用有限的数据类型种类和一些简单的数据结构。于是就出现了SOAP(SimpleObject Access Protocol)SOAP最主要的工作是使用标准的XML描述了RPC的请求信息(URI//方法/参数/返回值)


工作原理


1.调用客户端句柄;执行传送参数

2.调用本地系统内核发送网络消息

3.消息传送到远程主机

4.服务器句柄得到消息并取得参数

5.执行远程过

6.执行的过程将结果返回服务器句柄

7.服务器句柄返回结果,调用远程系统内核

8.消息传回本地主机

9.客户句柄由内核接收消息

10.客户接收句柄返回的数据


协议结构

远程过程调用(RPC)信息协议由两个不同结构组成:调用信息和答复信息。信息流程如下所示:

RPC:远程过程调用流程

RPC 调用信息:每条远程过程调用信息包括以下无符号整数字段,以独立识别远程过程:

程序号(Programnumber

程序版本号(Programversion number

过程号(Procedurenumber



RPC 调用信息主体形式如下:

structcall_body{

unsignedintrpcvers;

unsignedintprog;

unsignedintvers;

unsignedintproc;

opaque_authcred;

opaque_authverf;

1parameter

2parameter . . . }

RPC调用分为两类:

1.同步调用:客户端等待调用执行完成并返回结果

2.异步调用:客户端调用后不用等执行结果返回,但依然可以通过回调通知等方式获取返回结果。

若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。异步和同步的区别在于是否等待服务端执行完成并返回结果。


RPC 答复信息:RPC协议的答复信息的改变取决于网络服务器对调用信息是接收还是拒绝。答复信息请求包括区别以下情形的各种信息:

RPC 成功执行调用信息。.

RPC 的远程实现不是协议第二版,返回RPC支持的最低和最高版本号。

在远程系统中,远程程序不可用。

远程程序不支持被请求的版本号。返回远程程序所支持的最低和最高版本号。

请求的过程号不存在。通常是呼叫方协议或程序差错。

RPC答复信息形式如下:

enumreply_statstat

{MSG_ACCEPTED= 0,

MSG_DENIED= 1 }


RPC实现的概念结构


RPC 服务方通过RpcServer去导出(export)远程接口方法,而客户方通过RpcClient去引入(import)远程接口方法。客户方像调用本地方法一样去调用远程接口方法,RPC框架提供接口的代理实现,实际的调用将委托给代理RpcProxy。代理封装调用信息并将调用转交给RpcInvoker去实际执行。在客户端的RpcInvoker通过连接器RpcConnector去维持与服务端的通道RpcChannel,并使用RpcProtocol执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。

RPC 服务端接收器RpcAcceptor接收客户端的调用请求,同样使用RpcProtocol执行协议解码(decode)。解码后的调用信息传递给RpcProcessor去控制处理调用过程,最后再委托调用给RpcInvoker去实际执行并返回调用结果。

1. RpcServer 

   负责导出(export)远程接口 

2. RpcClient 

   负责导入(import)远程接口的代理实现 

3. RpcProxy 

   远程接口的代理实现 

4. RpcInvoker 

   客户方实现:负责编码调用信息和发送调用请求到服务方并等待调用结果返回 

   服务方实现:负责调用服务端接口的具体实现并返回调用结果 

5. RpcProtocol 

   负责协议编/解码 

6. RpcConnector 

   负责维持客户方和服务方的连接通道和发送数据到服务方 

7. RpcAcceptor 

   负责接收客户方请求并返回请求结果 

8. RpcProcessor 

   负责在服务方控制调用过程,包括管理调用线程池、超时时间等 

9. RpcChannel 

   数据传输通道 











原创粉丝点击