gRpc入门

news2024/11/25 2:03:00

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. 二者不能共存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/977666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ string

目录 string类介绍访问:[ ] 遍历迭代器遍历范围for遍历 容量相关:修改相关:编码表的了解写时拷贝的了解string的模拟 STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库&a…

【Linux】高级IO --- 多路转接,select,poll,epoll

所有通过捷径所获取的快乐,无论是金钱、性还是名望,最终都会给自己带来痛苦 文章目录 一、五种IO模型1.什么是高效的IO?(降低等待的时间比重)2.有哪些IO模型?哪些模型是高效的?3.五种IO模型的特…

【韩顺平 零基础30天学会Java】面向对象编程(基础)(5days)

面向对象编程 Java设计者引入类与对象(OOP),根本原因就是现有的技术,不能完美的解决新的需求。 对象主要是由属性和行为构成的。 类就是数据类型(比如Cat),对象就是具体的实例。 //定义一个猫…

QT转型Visual Studio(qmake项目到cmake项目的移植)

前言 由于工作需要,同时也为了方便以后的集成升级,希望将之前用Qt creator qmake开发的项目移植到cmake项目中,并使用Visual Studio 进行后续开发,本文主要用以记录该过程中的常规步骤和遇到的特殊情况。 qmake项目 在一开始&a…

MATLAB 的 figure 用法总结

文章目录 Syntax:DescriptionExamples1.figure2.figure(Name,Value)Position 属性: 设置 Figure 的位置和大小Name 属性: 设置 Figure 的名称NumberTitle 属性: 取消 Figure 名称里默认的数字units 属性color 属性 3.f figure(___)4.Working with Multiple Figures…

JAVA反序列化漏洞复现

Weblogic(CVE-2017-10271) 拉取容器 访问 http://192.168.142.151:7001/console/login/LoginForm.jsp ​ 启动nacs 进行漏洞扫描 下载weblogicScanner工具 git clone https://github.com/0xn0ne/weblogicScanner.git 开始扫描 访问http://192.168.1…

数据结构队列

数据结构队列 队列的概念及结构队列的是实现数据结构函数接口初始化销毁入队列(尾插)出队列(头删)求队列的长度判断队列是否为空取队头的数据取队尾的数据 队列的概念及结构 队列之允许在一段及进行数据插入操作,在另…

LeetCode 356. Line Reflection【数学,哈希表】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

IO day1

1->x.mind 2-> 3->计算一个文件的大小,计算一个文件有几行。封装成函数

MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 MyBatisPlus 一、 查询条件设置二、 映射匹配兼容…

数据结构day7栈-链式栈原理及实现

全部代码&#xff1a; main.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "linkstack.h"int main(int argc, char *argv[]) {linkstack s;s stack_create();if(s NULL){return -1;}stack_push(s, 10);stack_push(s…

[图文并茂]C++线性表及其逻辑结构

1.1线性表的定义 线性表是具有相同特性的数据元素的一个有限序列 对应的逻辑结构图形&#xff1a; 从线性表的定义中可以看出它的特性&#xff1a; &#xff08;1&#xff09;有穷性&#xff1a;一个线性表中的元素个数是有限的 &#xff08;2&#xff09;一致性&#xff1a…

注册登录首选,趣味滑块验证码

前言 注册登录账户时&#xff0c;保障账户安全是首要任务&#xff01;使用趣味滑块验证码&#xff0c;既能有效防御恶意攻击&#xff0c;又能为验证过程增添一丝乐趣。让注册和登录变得更加有趣又安全&#xff01; HTML代码 <script src"https://cdn6.kgcaptcha.co…

Ubutnu python2与python3切换

python -V #查看默认版本 Python 2.7.17 python3 -V #查看电脑3的版本 Python 3.6.9 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2 #设置两个版本的…

【Linux】虚拟地址空间理解

虚拟地址空间 虚拟地址是操作系统管理内存的一种方式。**方便不同进程使用的虚拟地址彼此隔离。方便物理内存中不相邻的内存在虚拟地址上视为连续的来使用。虚拟地址和物理地址的映射是通过MMU页表进行的。虚拟内存对实际内存有保护作用。

LeetCode(力扣)17. 电话号码的字母组合Python

LeetCode17. 电话号码的字母组合 题目链接代码 题目链接 https://leetcode.cn/problems/letter-combinations-of-a-phone-number/ 代码 class Solution:def __init__(self):self.letterMap ["", # 0"", # 1"abc", # 2"def&qu…

备战9月9日C/C++青少年等级考试(1~8级)

由中国电子学会举办的《全国青少年软件编程等级考试》将于9月9日&#xff08;周六&#xff09;举行&#xff0c;你准备的怎么样了&#xff1f;我在这里列举了1~8级的历届真题及解析&#xff0c;希望能助你考试通过&#xff01;&#xff01;&#xff01; C/C编程一级 一级标准 …

Go调用jenkins api执行流水线构建与停止

用到的库&#xff1a; "github.com/bndr/gojenkins" 代码如下&#xff0c;一次到位&#xff1a; import ("context""fmt""time""github.com/bndr/gojenkins" )// 构建指定任务 func buildJob(ctx context.Context, jenkins…

CUDA 问题 ,一直头大。。。。

1.卸载cuda ubuntu系统安装/卸载cuda和cudnn_怎么删除cudnn_Zhijun.liStudio的博客-CSDN博客ubuntu系统安装/卸载cuda和cudnn_怎么删除cudnnhttps://blog.csdn.net/weixin_45921929/article/details/128849198?ops_request_misc%257B%2522request%255Fid%2522%253A%252216939…

机器学习算法系列————决策树(二)

1.什么是决策树 用于解决分类问题的一种算法。 左边是属性&#xff0c;右边是标签。 属性选择时用什么度量&#xff0c;分别是信息熵和基尼系数。 这里能够做出来特征的区分。 下图为基尼系数为例进行计算。 下面两张图是对婚姻和年收入的详细计算过程&#xff08;为GINI系…