浅谈RPC调用过程

article/2025/10/4 2:09:07

RPC(Remote Procedure Call) - 远程过程调用,是一个计算机通信协议,它允许运行于一台计算机的程序调用另一台计算机的子程序,而无需额外地为这个交互作用编程。RPC主要应用在分布式系统架构中不同的系统之间的远程通信和相互调用。

举个例子:正常中午做饭我们需要把电饭锅插上电然后按开关开始煲饭,这相当于本地调用,而有时候我们正在外面,但我们想要到家的时候煲饭就已经完成,这时候就需要一个智能的电饭煲,我们可以通过远程打开煲饭开关,这就是远程调用。

RPC调用的流程:

  1. 客户端(client)以本地调用方式调用服务;

  2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;

  3. client stub找到服务地址,并将消息发送到服务端 ------ 序列化

  4. 服务端(server) 收到消息后进行解码  ------------- 反序列化

  5. server stub根据解码结果调用本地的服务

  6. 本地服务执行并将结果返回给server

  7. server stub将返回结果打包成消息并发送至client ------- 序列化

  8. client 接收到消息,并进行解码 ------  反序列化

  9. client 得到最终结果。

序列化/反序列化
只有二进制数据才能在网络中传输,序列化和反序列化的定义是:

将对象转换成二进制流的过程叫做序列化,

将二进制流转换成对象的过程叫做反序列化。

简单实例代码:

客户端:

package RPC.Client;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;import java.io.IOException;
import java.net.InetSocketAddress;
import RPC.LoginProtocol;
/*** @author 江冷易水寒* @data 2019/7/31 10:29*/
public class LoginClient {public static void main(String[] args) throws IOException {LoginProtocol proxt =  RPC.getProxy(LoginProtocol.class,1L,new InetSocketAddress("localhost",10000),new Configuration());String rs = proxt.login("迪丽热巴","迪丽,热吧?");System.out.println(rs);}}

服务端:

package RPC.Server;
/*** @author 江冷易水寒* @data 2019/7/31 10:07*/
public class LoginServiceImpl implements RPC.LoginProtocol{public String login(String username, String password) {return username + " logged in succeefully!";}
}
package RPC.Server;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.Server;
import java.io.IOException;
import RPC.LoginProtocol;
/*** @author 江冷易水寒* @data 2019/7/31 10:10*/
public class Starter {public static void main(String[] args) throws IOException {//创建一个RPC的创建器RPC.Builder builder = new RPC.Builder(new Configuration());//设置客户端要访问的IPbuilder.setBindAddress("localhost");//设置客户端要访问的端口builder.setPort(10000);//设置客户端实现RPC时的协议类builder.setProtocol(LoginProtocol.class);//设置客户端要访问的实例builder.setInstance(new LoginServiceImpl());Server server = builder.build();System.out.println("服务器启动了....");//启动服务器端server.start();}
}

客户端与服务端协议

package RPC;/*** @author 江冷易水寒* @data 2019/7/31 14:51*/
public interface LoginProtocol {public static final long versionID=1L;public String login(String username,String password);
}

代码目录结构

运行结果:


http://chatgpt.dhexx.cn/article/oHA0RfP3.shtml

相关文章

远程RPC调用用于js逆向

这里只是记录于学习,资源来自于大佬的github,有十分详细的介绍,我仅仅拿来一用。https://github.com/jxhczhl/JsRpc。(注RPC在某些网站会被检测到) 在右侧下载适合自己系统的exe文件,双击打开 练习对象是某…

使用 webservice 实现 RPC 调用

WebService 介绍 Web service 是一个平台独立的,低耦合的 web 的应用程序用于开发分布式的互操作的应用程序。Web Service 技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。 SO…

RPC调用链通信方法

RPC调用链可以将远程过程调用变成一个有效的堆栈。 当我们编写应用程序时,我们中的许多人认为REST是服务间通信的一个通用标准。然而,还有许多其他形式的通信,RPC就是其中之一。值得注意的是,通信方式的选择取决于许多因素&#…

使用Dubbo实现简单的RPC调用(Spring配置文件版)

更多文章和资源欢迎访问:SuperCoder Blog 文章目录 更多文章和资源欢迎访问:[SuperCoder Blog](https://supercoder.com.cn)前言一、Dubbo架构二、安装zookeeper三、代码实战1. 创建服务提供方2. 创建服务消费方 四、服务调用 前言 Dubbo是阿里巴巴公司…

用一个简单的函数来理一下RPC调用过程

1.什么是RPC RPC(Remote Procedure Call)远程过程调度,简单的理解就是一个节点请求另一个节点的提供的服务。 2.远程调用要面临的三个问题。 (1)Call ID映射。本地调用中,函数体是直接通过函数指针来指定…

Dubbo的RPC调用流程

首先在客户端启动时会从注册中心拉去和订阅对应的服务列表,Cluster会把拉取到的服务列表聚合成一个cluster,每次RPC调用前会通过Directory#list获取providers地址(已经生成好的invoker列表),获取这些服务列表给后续路由和负载均衡使用,框架内…

RPC 调用原理

RPC调用原理 RPC原理 RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样。分布式的应用可以借助RPC来完成服务之间的调用。 RPC框架原理 在RPC框架…

RPC调用完整流程

RPC调用完整流程:   调用方持续把请求参数对象序列化成二进制数据,经过 TCP 传输到服务提供方;服务提供方从 TCP 通道里面接收到二进制数据;根据 RPC 协议,服务提供方将二进制数据分割出不同的请求数据,经…

RPC调用

1.RPC调用、本地调用和HTTP调用 网络调用一般是基于HTTP协议进行调用,RPC是使用TCP或者UDP协议进行调用,效率上回更好; 常用的RPC框架有Thrift、GRPC等; 2.RPC的调用时序图 1)调用方调用Proxy请求服务,并…

简单实现rpc调用

rpc调用 代码地址 查看代码 rpc称远程调用过程,在rpc调用过程中需要解决的几个问题。 代理协议序列化 技术选型 协议,我们使用java的socket编程套接字代理,使用java的动态代理序列化,使用java的原生的序列化。 rpc衍生出来…

Go rpc调用

RPC原理图 客户端Stub: 客户端存根服务端Stub: 服务端存根 RPC技术架构 服务端:server.go package mainimport ("math""net""net/http""net/rpc" )type MathUtil struct { }// 该方法向外暴露:提供计算圆形面…

rpc调用 java_RPC调用的简单实现

RPC调用流程 流程描述: 1.服务调用者发送请求(interface#method#args) 2.客户端进行StringEncode编码 3.数据写到服务提供者 4.服务提供者接受请求 5.将接收的包进行StringDecode解码 6.服务提供方调用对应api 7.服务提供方响应方法调用结果 8.服务提供方将结果集进行StringEn…

RPC调用和HTTP调用的区别

一.远程调用方式 无论是微服务还是分布式服务(都是SOA,都是面向服务编程),都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下几种: RPC:Remote Produce…

RPC远程调用通俗理解

先从一个案例来讲RPC 为了提升饭店的服务能力,饭店从一开始只有一个负责所有事情的厨师发展成有厨师、切菜师、备菜师等多个角色。在饭店只有一个厨师的时候,厨师想要做出一道美味的番茄炒蛋的时候,他需要自己洗番茄、切番茄、打鸡蛋、炒菜。…

RPC通信基本原理 -- 浅析RPC远程过程调用基本原理

一、RPC基本概念 1.1、RPC简介 RPC 的全称是 Remote Procedure Call是一种进程间通信方式。RPC只是一个概念 而不是具体的协议或框架。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远…

RPC服务调用

RPC服务调用 一、RPC实现原理深入分析1、RPC的定义(1)RPC作用(2)RPC核心组成(3)RPC调用方式 二、精简版RPC调用代码实现1、场景2、接口设计3、序列化协议 最近在做调用系统相关的服务,采用主从的…

远程过程调用(RPC)详解

本文介绍了什么是远程过程调用(RPC),RPC 有哪些常用的方法,RPC 经历了哪些发展阶段,以及比较了各种 RPC 技术的优劣。 什么是 RPC RPC 是远程过程调用(Remote Procedure Call)的缩写形式,Birrell 和 Nels…

Simple Schnorr Multi-Signatures with Applications to Bitcoin 学习笔记

1. 引言 Blockstream团队2018年论文《Simple Schnorr Multi-Signatures with Applications to Bitcoin》。 对应的代码实现: https://github.com/KZen-networks/multi-party-schnorr https://github.com/lovesh/signature-schemes 论文要点: MuSig——…

【密码学原理】数字签名(ElGamal签名,Schnorr签名,椭圆曲线签名,RSA-PSS签名)

数字签名是公钥密码学发展过程中最重要的概念之一,产生和使用数字签名过程的一般模型如图所示 消息认证可以保护消息交换双方不受第三方的攻击,但是不能处理通信双方自身发生的攻击。例如对下图中的某种方式进行攻击,考虑两种情况&#xff1a…

Schnorr签名java实现

Schnorr签名(模指数)的实现java 1、算法描述2、算法的实现(java) 和ElGama数字签名一样,Schnorr数字签名方案也是基于离散对数。 Schnorr数字签名主要工作不依赖于消息,生成签名过程与消息相关的部分需要进…