gRpc入门

2023-11-09

gRpc

一、简介

1、gprc概念

gRpc是有google开源的一个高性能的pc框架,Stubby google内部的rpc,2015年正式开源,云原生时代一个RPC标准。

tips:异构系统,就是不同编程语言的系统。

2、grpc核心设计思路

grpc核心设计思路
    1. 网络通信 --> grpc自己封装网络通信的部分,提供多种语言的网络通信的封装(java(netty),c,go)的支持异构语言。
    2. 协议 --> http2协议,传输数据,支持二进制。支持双向流(双工)。连接的多路复用(NIO)
    3. 序列化 --> 基于文本Json,基于二进制(java原生序列化方式,Thrift二进制序列化,压缩二进制序列化)
                protobuf(protocol buffers)google开源的一种序列化方式。
                dubbo也可以用protobuf。  时间效率和空间效率是Json的3---5倍。
                定义了一套,IDL语言。
    4.代理的创建 --> 让调用者像调用本地方法那样,去调用远端的服务方法一样。
                    stub.  

3、gRpc和protobuf的区别

grpc是rpc框架。

protobuf是一种序列化方式

4、gRpc与ThrifRpc区别

​
共性:支持异构语言的  RPC
区别:
    1. 网络通信  Trift TCP 专属协议   
                grpc http2
    2. 性能角度,thrift Rpc效率高于gRpc.
    3. gRpc 大厂背书(google),云原生时代 合作更好 集成更多,所以grpc应用更广泛

5、gRpc的好处

  1. 高效的进行进程间通信。

  1. 支持多种语言 。原生支持,C GO Java实现。c语言版本上扩展,c++,c#,node JS,python,ruby,php (二等公民)

  1. 支持多平台运行。 Linux Andriod IOS MacOS Windows

  2. gRpc序列化方式采用protobuf,效率高

  3. 使用http2协议

  4. 大厂背书

二、http2.0协议

1、回顾 http1.x 协议

1.1、http1.0 协议

  • 请求响应的模式。

  • 短连接协议(无状态协议)。建立在tcp(长连接)上的,http主动断开连接(之前设备不好,主动断开)。

  • 传输数据文本结构

  • 单工,无法实现服务端推送。

    • 变相实现服务推送,(采用客户端轮询)

1.2、http1.1 协议

  • 请求相应的模式

  • 有限的长连接(保持一段时间)

  • 只能通过升级的方式,websocket协议,实现服务器想客户端推送。不属于http1.1的能力

1.3、总结http1.x协议特性:

  • 传输数据文本格式,可读性好但是效率差。

  • 本质上http1.x协议,无法实现双工通信。

  • 资源的请求。需要发送多次请求,建立多个连接才可以完成。分流(静态资源分离,cdn缓存加速)

2、HTTP2.0协议

  1. Http2.0协议是一个二进制协议,效率高于Http1.x协议,可读性差。

  2. 可以实现双工通信

  3. 一个连接可以请求多个数据。【多路复用】

3、HTTP2.O协议的三个概念

  1. 数据流 Stream

  2. 消息 message

  3. 帧 frame

一个连接,有多个数据流。Stream.

3.1、requestMessage

一个数据流,有request Message.

Message,里面有frame.

第一个frame,对应的就是header。

  • method:post

  • version:http2.0

  • user-agent:chrome

第二个frame,是body

  • data

如果get,就是一个frame帧。没有data,body。

3.1、responseMessage

第一个frame,对应的就是head。

  • status: 200

  • version:http2.0

第二个frame,是body

  • response数据

4、其他的相关概念

4.1、数据流的优先级

  1. 数据流的优先级:可以为不同的Stream设置权重,来限制不同流的顺序。

  2. 流控:client发送数据太快了,server处理不过来,通知client暂停数据的发送。

三、Protocol Buffers [protobuf]

1、简介

  1. protobuf是一种与编程语言无关【IDL】,与具体的平台无关【OS】。他定义的中间语言,可以方便,在Client和server之间进行RPC的数据传输。

  2. protobuf

    • protobuf 2

    • protobuf 3

    目前主流应用的都是protobuf3.

  1. protobuf主要安装protobuf的编译器,编译器目的,可以把protobuf的IDL语言,转换成具体某一种开发语言。

2、protobuf编译器安装

github上.

https://www.github.com/protocolbuffers/protobuf/releases

建议,64位,v3.19.6,是一个exe文件。

windows版本
1.直接解压缩,放置在一个特定的目录下面
2.直接配置环境变量 path
    protoc --version
    
mac版本
 brew install protobuf

3、protobuf IDEA插件

IDEA 新版本。原生支持,protocol Buffers.

  1. 2021.2版本后面的新版本,IDEA内置了Protobuf插件,和gRPC插件,都是默认勾选的。

  1. 2021.2版本之前的老版本,可以选装第三方protobuf插件。

  1. 二者不能共存

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gRpc入门 的相关文章

  • 如何通过RPC监听firestore

    我想听firestore中的实时变化 而且我也只允许使用Go 由于 Firestore SDK for Go 没有任何选项来监听实时更改 因此我决定使用 firestore v1beta1 sdk 我编写了以下代码来做到这一点 func T
  • 从 Node.JS 调用 Haskell

    我想从 Node js 对 Haskell 代码进行 RPC 调用 Node 和 Haskell 都有哪些库 我只能找到 XML RPC 和 Zeromq 但它们似乎不稳定 对于 Haskell 端的 xml rpc haxr 库已经存在很
  • NSURLSession HTTP/2 内存泄漏

    这个我的测试用例指出 当使用带有 HTTP 2 连接的 NSURLSession 时 存在内存问题 测试1 iOS 9 HTTP 2服务器 我使用 NSURLSession 上传 10M 文件到 HTTP 2 服务器 如果文件上传完成一切正
  • 如何在客户端使用 Java 读取 gRPC 中的元数据

    我正在使用 Java 和 Protoc 3 0 编译器 我的 proto 文件如下所述 https github com openconfig public blob master release models rpc openconfig
  • 如何使用 Jetty 客户端获取基于请求的连接所花费的时间

    我想计算根据要求请求开始和连接建立 TCP 连接建立 之间的时间 我问了这个问题question https stackoverflow com questions 66605208 how to get the time it took
  • gRPC 客户端在 Kubernetes 内重新连接

    如果我们在 Kubernetes Pod 中定义微服务 那么当服务 Pod 重新启动时 我们是否需要检测 gRPC 客户端重新连接 当 Pod 重新启动时 主机名不会更改 但我们不能保证 IP 地址保持不变 那么 gRPC 客户端是否仍然能
  • 如何直接从protobuf创建GRPC客户端而不将其编译成java代码

    使用 gRPC 时 我们需要通过协议缓冲区编译器 protoc 或使用 Gradle 或 Maven protoc 构建插件从 proto 服务定义生成 gRPC 客户端和服务器接口 Flow now protobuf file gt ja
  • Java gRPC 服务器用于长寿命流的有效实现

    我想了解 gRPC 框架的一部分 用于长期流的资源管理 假设我们有无限的罕见 每秒一次左右 事件源 我们希望通过 grpc 流的方式将其流式传输到客户端 这些事件由服务器上的单个应用程序线程生成 我看到两种可能的流事件实现 在 rpc 调用
  • HTTP2 请求示例因 Jmeter4、Java 10 无客户端 ALPNProcessors 崩溃

    我无法使用 Jmeter 4 0 创建 HTTP2 请求 我已经安装了最新的 JDK 和 HTTP 2 协议采样器插件 我还观察到 penJDK8ClientALPNProcessor e23ec5a 不适用于 java 10 0 2 尝试
  • PHP:获取 HTTP 协议版本(HTTP/1.1 与 HTTP/2)

    到目前为止 我的 php 应用程序到处都采用 HTTP 1 1 所以我定义了所有标题 如下所示 header HTTP 1 1 500 Internal Server Error 但现在我的服务器也支持 HTTP 2 我想使用正确的 HTT
  • 启动套接字服务器会干扰 gRPC/http 客户端服务器通信 Golang

    我有一个很大程度上基于此的服务器tutorial https www golinuxcloud com go grpc crud api postgresql db 在我对其应用了额外的更改后 它工作得很好 但现在我想添加socket io
  • Protobuf-java:合并两个原始对象而不连接重复字段

    我想合并两个复杂的原型对象protoA and protoB类型相同 如果两个对象中都设置了字段 则protoB应在生成的原型中设置 我可以使用 mergeFrom 功能 protoA toBuilder mergeFrom protoB
  • 导入“google/api/annotations.proto”未找到或有错误。如何将其添加为依赖项?

    按照文档如何设置 gRPC 网关 https github com grpc ecosystem grpc gateway 我发现自己陷入了生成 grpc 网关的第四步 也就是说 当添加以下行时 事情就会崩溃 import google a
  • gwt hibernate 程序中的异常

    我正在尝试制作一个简单的 GWT RPC Hibernate 程序 将用户添加到 MySQL 数据库 我正在使用 Eclipse EE 该应用程序已成功将用户添加到数据库 但在编译时引发异常 这是我的应用程序的例外情况和来源 例外 Exce
  • 缺少节点-v59-linux-x64/grpc_node.node

    我正在尝试在我的服务器中使用 Firebase admin SDK 当我部署时 出现错误 我在 firebase admin node module 映射中缺少文件 node v59 linux x64 grpc node node 我在包
  • 测试 gRPC 服务

    我想测试用 Go 编写的 gRPC 服务 我使用的示例是 Hello World 服务器示例grpc go 仓库 https github com grpc grpc go blob master examples helloworld g
  • 使用HTTP/2协议时如何传递Keep-alive元数据?

    我有一个angular使用带有嵌入式 Spring Boot 的 Web 应用程序tomcat服务器在后端 我想让已建立的 http 连接保持更长时间 以提高后续 http 请求的响应时间 和http 1 1浏览器被告知通过添加来保持 ht
  • 解决bazel中使用gRPC cpp时的依赖问题

    我正在尝试运行一个依赖 gRPC 的简单程序 我尝试了几个示例 但仍然出现以下错误 ERROR home git examples WORKSPACE 1 1 name git repository is not defined ERROR
  • gRPC 客户端重新连接逻辑导致服务器端打开重复流

    我有一个使用两个双向流的 gRPC 客户端 由于目前未知的原因 当我们每小时发送一次 keepAlive ping 时 会出现 onError 并带有statusRuntimeException在两个流上都被调用 为了处理重新连接 我在 j
  • Python 和 C# 之间的 IPC

    我想在 Windows 中的 Python 和 C 应用程序之间传递数据 我希望通道是双向的 事实上 我想将一个包含我用 C SharpPcap 捕获的网络数据包数据的结构传递给 Python 应用程序 然后将修改后的数据包发送回 C 程序

随机推荐

  • 前端基础学习之Sass

    一 概念 1 Sass是什么 Sass 英文全称 Syntactically Awesome Stylesheets 是一个最初由 Hampton Catlin 设计并由 Natalie Weizenbaum 开发的层叠样式表语言 Sass
  • AI读天涯神贴----人,应该怎么活

    接着上一期AI读天涯神贴 开悟其实很简单 这期我们来用AI读另外一篇神帖 人 应该怎么活 下面是帖子中的一些节选 老家有句话 叫春天戳一棍 秋天吃一顿 意思是 春天用个棍子在地上捅个窟窿 扔进种子 那秋天就有可能因此吃上一顿的果实 春天 这
  • Prometheus - SSL 证书过期监控

    目录 一 环境 二 部署 Exporter 2 1 配置 blackbox exporter 2 2 配置 Prometheus 2 3 Grafana 监控面板 一 环境 数据采集 Exporter blackbox exporter V
  • Java实现登录[数据库]

    和上篇的随机点名系统一样 都是使用MySQL数据库来实现 因为刚学所以写点简单例子满足下自己 需求分析 1 输入用户名和密码 2 与数据库中的记录进行比较 原理比较 简单 直接贴代码吧 import java sql Connection
  • 黑马点评给店铺类型查询业务添加缓存(List实现)

    代码如下 public Result queryShopTypeList String key CACHE SHOP TYPE KEY List 1 从Redis中查询店铺类型 获取所有 List
  • 红黑树

    1 概念 红黑树是一种近似平衡的二叉搜索树 在每个结点上增加一个存储位表示结点的颜色 可以是Red或Black 通过对任何一条从根到叶子的路径上各个结点着色方式的限制 红黑树确保没有一条路径会比其他路径长出两倍 因而是接近平衡的 2 性质
  • 多项式回归的matlab实现

    一次函数的线性回归 首先我们回顾一下当回归函数为一次函数的情况 存在训练样本矩阵 X 该矩阵大小为m n 其中m为样本数量 n为特征数量 此时回归方程为 其中为系数向量 此时代价函数为 当代价函数取得最小值时 为最优解 对进行求导得到
  • Navicat使用教程:在Navicat Monitor for MySQL/MariaDB中配置实例

    下载Navicat Monitor最新版本 Navicat Monitor是一套安全 简单而且无代理的远程服务器监控工具 它具有强大的功能使你的监控发挥最大效用 受监控的服务器包括 MySQL MariaDB 和 Percona Serve
  • Nvidia RTX A4000 GPU 安装 515驱动记录-Ubuntu22.04

    The record of Nvidia driver installation of Nvidia RTX A4000 in ubuntu22 04 Environment Ubuntu22 04 GPU Nvidia RTX A4000
  • pytorch官方demo(LeNet)——model篇

    前言 以下文章均为学习笔记 目的是加强自己的记忆 同时希望帮助更多的学习者理解视频中的内容 是跟着一位优秀的b站up主霹雳吧啦Wz学习的 附上视频链接 2 1 pytorch官方demo Lenet 哔哩哔哩 bilibili 另外笔记是参
  • 第2章第2节练习题3 使用队列模拟渡口管理

    问题描写叙述 汽车轮渡口 过江渡船每次能载10辆车过江 过江车分为客车和货车类 上渡船有例如以下规定 1 同类车先到先上船 2 客车先于货车上渡船 其每上4辆客车 才同意放上一辆货车 3 若等待客车不足4辆 则以货车取代 4 若无货车等待
  • 利用SimpleDateFormat或者LocalDateTime生成格式为“yyyy-MM-dd HH:mm:ss“的当前时间

    java程序 利用LocalDateTime生成格式为 yyyy MM dd HH mm ss 的当前时间 DateTimeFormatter formatter DateTimeFormatter ofPattern yyyy MM dd
  • CSS3属性之text-overflow:ellipsis

    语法 text overflow clip ellipsis 默认值为clip 不显示省略标记 clip 当前对象内文本溢出时不显示省略标记 而是将溢出部分裁剪 ellipsis 当对象内文本一处时显示省略标记 一 常见的单行文本溢出显示省
  • STM32微控制器综合实训10 基于CAN总线的超声波测距仪设计实验

    实验10 基于CAN总线的超声波测距仪设计实验 利用CAN总线来实现数据的传送 文章目录 代码讲解 c8t6 温度传感器ds18b20 超声波测距 main c中的while CAN通信 代码讲解 zet6 main c 总结 代码讲解 c
  • IDEA pom.xml依赖版本号报错

    自我问题解决记录 折腾了一上午终于解决 我先按照其他解决方法都试过 没有任何反应 大家还是可以试试 1 修改maven版本号 重新下载旧版本并配置环境变量 并装了cleanLastUpdated bat小脚本去清除没有下载成功 完全的包 没
  • UC3843驱动BOOST升压电路

    充能模块通过一个UC3843芯片控制BOOST升压电路实现 由于电磁炮的发射能量与电容上储存的能量存在正相关 电容上储存的能量由于电容的容值正相关 因此本系统需要选择较大的电解电容 在实际的过程中选择了2个470uF 450V的电容进行并联
  • 【刷题】华为笔试面试机考 [HJ5] - 进制转换

    题目地址 点击跳转 题目描述 写出一个程序 接受一个十六进制的数 输出该数值的十进制表示 输入描述 输入一个十六进制的数值字符串 注意 一个用例会同时有多组输入数据 请参考帖子https www nowcoder com discuss 2
  • GAMES101-现代计算机图形学学习笔记(4)作业3

    前言 上篇作业2 本篇将更新作业3相关内容 作业3相关链接 games的作业3链接 我的源码 作业3简述 插值计算 各种shader实现 作业3相关知识笔记 Barycentric Coordinates Blinn Phong Lambe
  • 开源大数据工具汇总

    查询引擎 一 Phoenix 贡献者 Salesforce 简介 这是一个Java中间层 可以让开发者在Apache HBase上执行SQL查询 Phoenix完全使用Java编写 代码位于GitHub上 并且提供了一个客户端可嵌入的JDB
  • gRpc入门

    gRpc 一 简介 1 gprc概念 gRpc是有google开源的一个高性能的pc框架 Stubby google内部的rpc 2015年正式开源 云原生时代一个RPC标准 tips 异构系统 就是不同编程语言的系统 2 grpc核心设计