首页 > 其他分享 >gRPC框架

gRPC框架

时间:2024-03-30 11:12:33浏览次数:26  
标签:调用 框架 gRPC RPC 存根 服务器 服务端 客户端

读了songguojun大佬的一篇文章gRPC框架详解,总结一下关于gRPC的知识点

RPC是什么

RPC是远程调用,是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议,简单的理解就是一个节点请求另一个节点提供的服务。

RPC只是一套协议,基于这套协议规范来实现的框架称为RPC框架。

 

RPC机制和实现过程

RPC是远程过程调用的方式之一,涉及调用方和被调用方两个进程的交互。因为RPC提供了类似于本地方法调用的形式,所以对于调用方来说,调用RPC方法和调用本地方法并没有明显区别。

 

远程调用过程中的client和server每个阶段的操作。

 

当客户端发送请求的网络消息到达服务器时,服务器上的网络服务将其传递给服务器存根(server-stub)。服务器存根与客户端存根一一对应,

是远程方法在服务端上的体现,用来将网络请求传递来的数据转换为本地过程调用。服务器存根一般处于阻塞状态,等待消息输入。

 

当服务器存根收到网络消息后,服务器将方法参数从网络消息中提取出来,然后以常规方式调用服务器上对应的实现过程。从实现过程角度看,

就好像是由客户端直接调用一样,参数和返回地址都位于调用堆栈中,一切都很正常。实现过程执行完相应的操作,随后用得到的结果设置到

堆栈中的返回值,并根据返回地址执行方法结束操作。

 

read过程调用完后,实现过程将控制权转移给服务器存根,它将结果(缓冲区的数据)打包为网络消息,最后通过网络响应将结果返回给客户端。

网络响应发送结束后,服务器存根会再次进入阻塞状态,等待下一个输入的请求。

 

客户端接收到网络消息后,客户操作系统会将该消息转发给对应的客户端存根,随后解除对客户进程的阻塞。客户端存根从阻塞状态恢复过来,

将接收到的网络消息转换为调用结果,并将结果复制到客户端调用堆栈的返回结果中。当调用者在远程方法调用read执行完毕后重新获得控制权时,

它唯一知道的是read返回值已经包含了所需要的数据,但是并不知道该read操作到底是本地操作系统读取的文件数据,还是通过远程过程调用远端服务读取文件数据。

 

RPC执行步骤:

1.调用客户端句柄,执行传递参数

2.调用本地系统内核发送网络消息

3.消息传递到远程主机,就是被调用的服务端

4.服务端句柄得到消息并解析消息。

5.服务端执行被调用方法,并将执行完毕的结果返回给服务器句柄。

6.服务器句柄返回结果,并调用远程系统内核。

7.消息经过网络传递给客户端

8.客户端接受数据。

 

 

RPC框架的组成

一个完整的RPC框架包含了服务注册发现,负载,容错,序列化,协议编码和网络传输等组件。

不同的RPC框架包含的组件可能会有所不同,但是一定要包含RPC协议相关的组件,RPC协议包括序列化,协议编解码器和网络传输栈,如图所示:

 RPC和HTTP区别

1.RPC是远程过程调用,其调用协议通常包括序列化协议和传输协议。序列化协议有基于纯文本的xml和json,二进制编码的protobuf和Hessian。传输协议是指其底层网络协议传输所使用的协议,比如TCP,HTTP。

2.HTTP是RPC的传输协议的一个可选方案,HTTP既可以和RPC一样作为服务间通信的解决方案,也可以作为RPC中通信层的传输协议。(此时与之对比的是TCP协议)。

 

 

gRPC的特点

1.支持多种语言

2.基于IDL文件定义服务,grpc使用protobuf作为接口定义语言(IDL)来描述服务接口和有效负载消息的结构。通过proto3工具生成指定语言的数据结构,服务端接口以及客户端stub。

3.通信协议基于标准的HTTP/2设计,支持双向流,消息头压缩,单TCP的多路复用,服务端推送等特定,这些特定使得gRPC在移动端设备上更加高效

4.序列化支持PB和json,PB是一种语言无关的高性能序列化框架,基于HTTP/2+PB,保障了RPC调用的高性能。

 

 

gRPC使用说明

首先定义服务,指定其能够被远程调用的方法,包括参数和返回类型,这里使用protobuf来定义服务。在服务端实现定义的服务接口,

并运行一个gRPC服务器来处理客户端调用。

 

gRPC四种通信方式

1.简单RPC:即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用。

2.服务端流式RPC:一个请求对象,服务端可以传回多个结果对象。即客户端发送一个请求给服务端,可以获得一个数据流用来读取一系列消息。客户端

从返回的数据流里一直读到直到没有更多消息为止。

3.客户端流式RPC:客户端传入多个请求对象,服务端返回一个响应结果。即客户端用提供的一个数据流写入并发送一系列消息给服务端。一旦客户端完成消息写入,就等到服务端读取这些消息并返回应答。

4.双向流式RPC:结合客户端流式rpc和服务端流式rpc,可以传入多个对象,返回多个响应对象。即两边都可以分别通过一个读写数据流来发送一系列消息。这两个数据流操作是相互独立的,所以客户端和服务端能够按其希望的任意顺序读写。

 

标签:调用,框架,gRPC,RPC,存根,服务器,服务端,客户端
From: https://www.cnblogs.com/huwy-123/p/18105231

相关文章

  • Junit深入讲解(JAVA单元测试框架)
    1、此处用的是Junit5,此处pom文件需要引的依赖是<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version><scope&......
  • 基于Java+Springboot框架自习室教室座位预约系统设计与实现
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • VOL框架 GetPageData 前端加入自定义查询条件的处理方法
    VOL框架GetPageData前端加入自定义查询条件的处理方法前端加入两个自定义条件:开始日期,结束日期publicoverridePageGridData<ST_QueryFeeReceiveable>GetPageData(PageDataOptionsoptions){QuerySql=$@"SELECTFeeReceivableID,R.FeeI......
  • darknet框架训练YOLOv7模型与工业缺陷检测
    1.darkne介绍Darknet是一个开源的深度学习框架,由JosephRedmon(YOLO~YOLOv3作者或参与者)开发,主要用于实现神经网络模型。这个框架最初是为了实现计算机视觉任务而创建的,尤其是目标检测。其中最著名的应用之一就是YOLO(YouOnlyLookOnce)系列目标检测算法。以下是......
  • 【QT+QGIS跨平台编译】040:【geos_c+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
    点击查看专栏目录文章目录一、geos_c介绍二、文件下载三、文件分析四、pro文件五、编译实践一、geos_c介绍  GEOS_C(GEOSC++接口)是GEOS库的C语言版本,它提供了一套丰富的API,允许开发者在C++程序中执行复杂的几何形状处理和空间关系分析。GEOS_C是基于JTS(Jav......
  • 针对框架以外的页面路由配置教程
    一.找到项目中的routes.js//学生注册页面路由constAoYuStudentRegister=[{path:'/MarketAoYuStudentRegister',name:'学生信息填写',component:_import('system/AoYuStudentRegister')}]path:‘/MarketAoYuStudentRegister’:表示当用户访问/M......
  • Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架
    在数字化采购领域,企业需要一个高效、透明和规范的管理系统。通过采用SpringCloud、SpringBoot2、Mybatis等先进技术,我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力,通过待办消息、招标公告、中标公告和信息发布等功能模块,实现了对供应商的集中管理和风险控制......
  • 前端学习-UI框架学习-Bootstrap5-012-进度条
    菜鸟教程链接创建一个基本的进度条的步骤如下:添加一个带有.progress类的。接着,在上面的内,添加一个带有class.progress-bar的空的。添加一个带有百分比表示的宽度的style属性,例如style="width:70%"表示进度条在70%的位置。注意:我发现如果这个contianer里面不放......
  • 前端学习-UI框架学习-Bootstrap5-011-徽章(Badges)
    菜鸟教程链接<template><divclass="containermt-3"><h3>徽章<spanclass="badgebg-success">new</span></h3><h3>药丸形状徽章<spanclass="badgebg-dangerrounded-pill">new</span&g......
  • 前端学习-UI框架学习-Bootstrap5-010-按钮组
    菜鸟教程链接btn-group按钮组<template><divclass="containermt-3"><h2>加载按钮组</h2><divclass="btn-group"><buttonclass="btnbtn-primary">......