IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 一文弄懂 RPC 通信流程全过程 -> 正文阅读

[网络协议]一文弄懂 RPC 通信流程全过程

一文弄懂 RPC 通信流程全过程

什么是 RPC 呢

RPC 的全称是 Remote Procedure Call,即远程过程调用

从字面意思可以知道,远程肯定是指要跨机器而非本机,需要网络编程才能实现。但是不是只要通过网络通信访问到另一台机器的应用程序,就可以称之为 RPC 调用了?

其实 RPC 是帮助我们用来屏蔽网络编程细节,实现调用远程方法就跟调用本地方法(同一个项目中的方法)一样的简单,不需要因为网络编程而写很多与业务无关的代码。总之,RPC 的作用体现在两方面:

  1. 屏蔽远程调用根本地调用的区别,调用远程方法就像调用本地方法一样简单
  2. 隐藏底层网络通信的复杂性,让我们更专注于业务逻辑

RPC 通信流程

一个完整的 RPC 会涉及到哪些步骤呢?

  1. 由于 RPC 的远程调用必然会通过网络来传输数据,且需要保证可靠性,所以 RPC 一般默认采用 TCP 来进行传输
  2. 网络传输的数据必须是二进制数据,但是调用方请求的出入参数都是对象,而对象是无法直接在网络中传输的,因此我们需要把对象转换为二进制数据才能在网络上传输,这个过程我们称之为“序列化”
  3. 当二进制数据进过网络传输给了服务提供方之后,那提供方怎么知道一个请求的数据哪里结束,是一个什么类型的请求呢
  4. 于是我们将数据格式的约定叫做“协议“,一般分为消息头和消息体,服务方根据协议格式就可以从二进制数据中分割出不同的请求来,同时根据请求类型和序列化类型,把二进制的消息体逆向还原成请求对象,称之为”反序列化“
  5. 服务方根据反序列化出来的请求对象找到对应的实现类,完成真正的方法调用,再将结果传输序列化之后通过 TCP 传输给调用方
  6. 调用方再反序列化即可获得应答对象,这样就完成了一次 RPC 调用。

注意:这里序列化是对方法调用的请求信息进行处理,编解码是对网络传输消息进行处理

那 RPC 是怎么简化 API,屏蔽掉 RPC 细节,使用方只需要关注业务接口,像调用本地一样来调用远程方法呢?

  • 由服务提供方给出业务接口申明,在调用方的程序里面, RPC 框架根据调用的服务接口提前生成动态代理实现类,并通过依赖注入等技术注入到声明了接口的相关业务逻辑里面。该代理实现类会拦截所有的方法调用,在提供的方法逻辑里面完成一套完整的远程调用,并把远程调用结果返回个调用方,这样调用方在调用远程方法的时候就像调用本地方法一样。

有上述流程就一定是一个 RPC 框架了吗?

  • RPC 不仅有上述的作用,其真正强大的地方是他的治理功能,比如连接管理、健康检测、负载均衡、熔断限流等等

该文是作者的看极客的学习笔记

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:49:02  更:2021-09-23 11:50:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/21 6:54:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码