RPC

RPC(Remote Procedure Call) 是一种进程间通信方式。它允许程序调用另一个地址空间的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同。

现有的 RPC 实现基本都是由以下五部分组成:
User
User-stub
RPCRuntime
Server-stub
Server

这里 user 就是 client 端,当 user 想发起一个远程调用时,它实际是通过本地调用 user-stub。 user-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的 RPCRuntime 实例传输到远端的实例。 远端 RPCRuntime 实例收到请求后交给 server-stub 进行解码后发起本地端调用,调用结果再返回给 user 端。

rpc的接口调用例子 rpc接口怎么调用_java

  1. client代码像普通函数调用一样调用client stub函数,这个调用是本地调用,调用参数会和平常函数调用一样进行返回地址和调用参数压栈操作;
  2. client stub会把调用参数和其它信息(比如调用方法名、调用属性等,可以称为metadata)进行打包封装成message,然后通过系统调用发送该message,这个打包的过程是个序列化的过程;
  3. client寻求到服务端的地址,然后通过本地操作系统经由某种协议,将上述message发送给server端;
  4. server端的操作系统接收message后将其传递给server stub;
  5. server stub将message解包,得到原始传递过来的各项调用参数,解包的过程是反序列化的过程;
  6. server stub调用server端的本地函数,然后将得到的结果按照上述类似的步骤反向传递给client作为结果返回。当然整个过程也可能不那么顺利,那么也应该产生合适的状态码、异常信息作为返回。

User-stub 以及 Server-stub 一般是由框架生成的客户端以及服务端的桩代码。
RPCRuntime:框架提供的远程通信机制。