RPC基础学习

RPC:Remote Procedure Call

简单的概述一下RPC远程调用的原理:

1)如果A调用B提供的remoteHello方法,

2)首先A与B之间应该建立一个TCP连接,

3)然后将A想要调用的remoteHello方法这个方法名以及方法参数序列化成字节流发送给B,

4)然后B将发送过来的字节流反序列化得到目标方法名,方法参数,接着执行相应的方法调用,并将结果返回。

5)然后A获得B传送过来的字节流中的结果,并做相关操作。

RPC框架可以将1~5封装成一个API,让客户可以简单的实现远程调用。

RPC与socket的区别:

RPC是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用)。RPC带来了开发C/S程序的简单可靠的手段,它通过一种叫XDR的数据表达方法描述数据,程序员书写伪代码,然后由rpcgen程序翻译为真正的可编译的C语言源代码,再编译成真正的Client端和Server端程序。 

RPC作为普遍的C/S开发方法,开发效率高效,可靠.但RPC方法的基本原则是--以模块调用的简单性忽略通讯的具体细节,以便程序员不用关心C/S之间的通讯协议,集中精力对付实现过程.这就决定了 RPC生成的通讯包不可能对每种应用都有最恰当的处理办法,与Socket方法相比,传输相同的有效数据,RPC占用更多的网络带宽. 

RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源.另外,在对程序优化时,程序员虽然可以直接修改由rpcgen产生的令人费解的源程序,但对于追求程序设计高效率的RPC而言,获得的简单性则被大大削弱. 

可以从网上很多资料中可以看到,RPC包含四个核心组件,分别是Client,Server,Client Stub,Server Stub。

Client:服务的调用方

Server:服务的提供方

Client Stub:存放服务端地址消息,再将客户端的请求参数打包成网络消息,再通过网络将信息发送给服务方

Server Stub:接收客户端发来的消息,将消息解包,并调用本地的方法。

(可耻的转载,还盗图)

简单来说,要实现RPC模块,就可以实现这一部分的功能



猜你喜欢

转载自blog.csdn.net/huu163/article/details/80594730