RPC协议

    xiaoxiao2021-03-25  72

    0、引言

    进程是计算机中分配资源的最小单位,每个进程都有自己的一部分独立的资源,彼此之间是隔离的。为了使不同进程能够互相访问资源并进行协调工作,我们需要进程间通信。IPC(Inter-Process Communication) 进程间通信,是指两个进程或线程间传递数据或信号的一些技术或方法。这里的进程间既可以指同一计算机也可以是网络连接上的不同计算机。

    进程间通信技术包括消息传递、同步、共享内存和远程过程调用。

    有两种类型的进程间通信IPC

    本地过程调用(LPC),用在多任务的操作系统中,使得同时运行的任务能够相互会话,这些进程共享内存空间使任务同步和互相发送信息。远程过程调用(RPC),类似于LPC,区别在于,它是在网上工作的。

    1、RPC的定义

    RPC(remote procedure call) 远程过程调用,是一种进程间的通信方式,允许程序调用另一个地址空间的(通常是网络的另一台服务器)的过程或函数,而程序员不用显式编码这个远程调用的细节。即程序员无论是调用本地还是调用远程的函数,本质上编写的调用代码基本相同。

    程序员对本地调用很熟悉,如果我们把RPC做成和本地调用完全类似,那么就很容易被接受,使用起来毫无障碍。A服务器上的程序想要调用B服务器上提供的方法,因为他们不在同一个内存空间,所以不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

    RPC很麻烦,所以人们开发了很多框架来实现它。为了实现这个目标,RPC框架需要提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。比如最早的CORBA,Java RMI,Web Service的RPC风格,Hessian,Thrift,甚至Rest API。

    框架隐藏了底层的细节,在使用形式上可以像调用本地方法一样调用远程的方法。

    RPC 调用分以下两种:

    同步调用:客户端等待调用执行完成并获取到执行结果。异步调用:客户端调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。若客户端不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。

    异步和同步的区分在于是否等待服务端执行完成并返回结果。

    2、RPC调用的过程

    将结构进一步细化:

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

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

    组件

    上面我们进一步拆解了 RPC 实现结构的各个组件组成部分,下面我们详细说明下每个组件的职责划分。

    RpcServer 负责导出(export)远程接口RpcClient 负责导入(import)远程接口的代理实现RpcProxy 远程接口的代理实现RpcInvoker 客户端:负责编码调用信息和发送调用请求到服务端并等待调用结果返回 服务端:负责调用服务端接口的具体实现并返回调用结果RpcProtocol 负责协议编/解码RpcConnector 负责维持客户端和服务端的连接通道和发送数据到服务端RpcAcceptor 负责接收客户端请求并返回请求结果RpcProcessor 负责在服务端控制调用过程,包括管理调用线程池、超时时间等RpcChannel 数据传输通道

    3、和其他通信方式的对比

    系统间常见的通信方式有HTTP、webservice、RPC等。

    3.1 RPC和Webservice

    两个老板手下各有一个负责接通MSN的秘书.这两个秘书就是基于RPC协议建立的会话层通信.老本不需要知道怎么使用MSN,只要告诉秘书,秘书就会通过 MSN与对方建立会话请求和响应.而基于Socket的通信,老板需要会使用MSN,这样尽管老板需要事先培训一下MSN的简单使用常识,但若与对方通信 时,无需经过秘书,效率更高.

    WebService有两种方式,一是SOAP协议方式,在这种方式下需要WSDL,UDDI等,二是REST方式,这种方式根本不需要WSDL,UDDI等。而且REST方式现在看来是更加流行,更有前途的方式。

    3.2 Webservice 和 HTTP区别

    HTTPService基于http协议,而WebService基于soap协议在处理数据上HTTPService效率较高,WebService能处理较复杂的数据类型,HTTP协议传输的都是字符串了,webservice则是包装成了更复杂的对象。

    参考: http://blog.csdn.net/mindfloating/article/details/51477557 demo: https://github.com/mindwind/craft-atom

    转载请注明原文地址: https://ju.6miu.com/read-29359.html

    最新回复(0)