我的编程空间,编程开发者的网络收藏夹
学习永远不晚

grpc是不是只支持go语言

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

grpc是不是只支持go语言

这篇文章主要介绍“grpc是不是只支持go语言”,在日常操作中,相信很多人在grpc是不是只支持go语言问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”grpc是不是只支持go语言”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

grpc不是只支持go语言。grpc是通信协议基于HTTP/2,支持多语言的RPC框架;目前提供C、Java和Go语言版本,分别是grpc、grpc-java、grpc-go;其中C版本支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#支持。

什么是grpc

gRPC 是通信协议基于 HTTP/2,支持多语言的 RPC 框架,面向移动和 HTTP/2 设计。gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

RPC:Remote Procedure Call 的缩写,译为远程过程调用(也可译为远程方法调用或远程调用),它是计算机通信协议。该协议可以实现调用远程服务就像调用本地服务一样简单,无需关心跨网络,跨平台,跨语言等问题。

gRPC 消息序列化方式通常使用 Protobuf,它是二进制格式,体积小,网络传输快,占用带宽流量少,调用性能更高。

gRPC 的特点

  • IDL

    gRPC 使用 ProtoBuf 来定义服务,ProtoBuf 是由 Google 开发的一种数据序列化协议(类似于 XML、JSON)。ProtoBuf 能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。

  • 多语言支持

    gRPC 支持多种语言,并能够基于语言自动生成客户端和服务端功能库。目前已提供了 C 版本 grpc、Java 版本 grpc-java 和 Go 版本 grpc-go,其中,grpc 支持 C、C++、Node.js、Python、Ruby、Objective-C、PHP 和 C# 等语言,grpc-java 已经支持 Android 开发。

  • HTTP2

    gRPC基于HTTP2标准设计,带来了更多强大功能,如双向流、头部压缩、多复用请求等。这些功能带来重大益处,如节省带宽、降低TCP链接次数、节省CPU使用和延长电池寿命等。同时,gRPC还能够提高了云端服务和Web应用的性能。gRPC既能够在客户端应用,也能够在服务器端应用,从而以透明的方式实现客户端和服务器端的通信和简化通信系统的构建。

为什么我们要用grpc

  • 生态好:背靠Google。还有比如nginx也对grpc提供了支持,参考链接

  • 跨语言:跨语言,且自动生成sdk

  • 性能高:比如protobuf性能高过json, 比如http2.0性能高过http1.1

  • 强类型:编译器就给你解决了很大一部分问题

  • 流式处理(基于http2.0):支持客户端流式,服务端流式,双向流式

grpc 的优点是怎么实现的

1、grpc性能高:protobuf为什么比json性能高?

1)什么是protobuf?

  • Protobuf是由Google开发的二进制格式,用于在不同服务之间序列化数据。是一种IDL(interface description language)语言

2)他比json快多少?

  • 快六倍,参考链接

3)为什么protobuf比json快?

  • protobuf的二进制数据流和json数据流如下图

grpc是不是只支持go语言

  • 对比json数据和protobuf数据格式可以知道

  • 体积小-无需分隔符:TLV存储方式不需要分隔符(逗号,双引号等)就能分隔字段,减少了分隔符的使用

  • 体积小-空字段省略:若字段没有被设置字段值,那么该字段序列化时的数据是完全不存在的,即不需要进行编码,而json会传key和空值的value

  • 体积小-tag二进制表示:是用字段的数字值然后转换成二进制进行表示的,比json的key用字符串表示更加省空间

  • 编解码快:tag的里面存储了字段的类型,可以直接知道value的长度,或者当value是字符串的时候,则用length存储了长度,可以直接从length后取n个字节就是value的值,而如果不知道value的长度,我们就必须要做字符串匹配

  • 细化了解protobuf的编码可以去看:varint 和 zigzag编码方式

2、grpc性能高:http2.0为什么比http1.1性能高?

1)多路复用

  • http2.0和http 1.* 还有 http1.1pipling的对比

    示意图

grpc是不是只支持go语言

  • http/1.* :一次请求,一个响应,建立一个连接用完关闭,每一个请求都要建立一个连接

  • http1.1 pipeling: Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞

  • http2: 多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行

  • grpc 多路复用还有哪些优点

    • 减少了tcp的连接,降低了服务端和客户端对于内存,cpu等的压力

    • 减少了tcp的连接,保证了不频繁触发tcp重新建立,这样就不会频繁有慢启动

    • 减少了tcp的连接,使网络拥塞情况得以改善

  • 为什么http/1.1不能实现多路复用而http2.0可以?

    • 因为http/1.1传输是用的文本,而http2.0用的是二进制分帧传输

2)头部压缩

  • 固定字段压缩:http可以通过http对body进行gzip压缩,这样可以节省带宽,但是报文中header也有很多字段没有进行压缩,比如cookie, user agent accept,这些有必要进行压缩

  • 避免重复:大量请求和响应的报文里面又很多字段值是重复的,所以有必要避免重复性

  • 编码改进:字段是ascii编码,效率低,改成二进制编码可以提高

  • 以上通过HPACK算法来进行实现,算法主要包含三个部分

    • 静态字典:将常用的header字段整成字典,比如{":method":"GET"} 就可以用单个数字 2来表示

    • 动态字典:没有在静态字典里面的一些头部字段,则用动态字典

    • Huffman 编码: 压缩编码

3)二进制分帧

  • 在二进制分帧层上,HTTP 2.0 会将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码 ,其中HTTP1.x的首部信息会被封装到Headers帧,而我们的request body则封装到Data帧里面。

  • 这样分帧以后这些帧就可以乱序发送,然后根据每个帧首部的流标识符号进行组装

  • 对比http/1.1因为是基于文本以换行符分割每一条key:value则会有以下问题:

    • 一次只能处理一个请求或者响应,因为这种以分隔符分割消息的数据,在完成之前不能停止解析

    • 解析这种数据无法预知需要多少内存,会给服务端有很大压力

4)服务器主动推送资源

  • 由于支持服务器主动推送资源,则可以省去一部分请求。比如你需要两个文件1.html,1.css,如果是http1.0则需要请求两次,服务端返回两次。但是http2.0则可以客户端请求一次,然后服务端直接回吐两次。

到此,关于“grpc是不是只支持go语言”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

grpc是不是只支持go语言

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

grpc是不是只支持go语言

这篇文章主要介绍“grpc是不是只支持go语言”,在日常操作中,相信很多人在grpc是不是只支持go语言问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”grpc是不是只支持go语言”的疑惑有所帮助!接下来,请跟
2023-07-04

GRPC是否仅支持Go语言?深入研究及分析

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《GRPC是否仅支持Go语言?深入研究及分析》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!GRPC 是否只支持 Go 语言?探究
GRPC是否仅支持Go语言?深入研究及分析
2024-04-04

linux支不支持go语言

这篇文章主要讲解了“linux支不支持go语言”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux支不支持go语言”吧!linux支持go语言,因为go语言可以跨平台。由于其模块化设计和
2023-07-04

dubbo支不支持go语言

这篇文章主要介绍“dubbo支不支持go语言”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“dubbo支不支持go语言”文章能帮助大家解决问题。dubbo支持go语言。Dubbo已不在局限在Java语
2023-07-04

为什么选择 Go 语言来支持 GRPC?

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《为什么选择 Go 语言来支持 GRPC?》,就带大家讲解一下知识点,若是你对
为什么选择 Go 语言来支持 GRPC?
2024-04-04

go语言支不支持锁

本文小编为大家详细介绍“go语言支不支持锁”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言支不支持锁”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。go语言支持锁。go语言标准库中提供了两种锁:1、互斥锁(
2023-07-04

VSCode支不支持go语言

这篇“VSCode支不支持go语言”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“VSCode支不支持go语言”文章吧。VSC
2023-07-05

go语言支不支持aop

这篇“go语言支不支持aop”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言支不支持aop”文章吧。go语言支持aop
2023-07-04

区块链是不是只能用go语言

本篇内容介绍了“区块链是不是只能用go语言”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!不是。区块链是一种编程思想,原则上使用任何一种编程语
2023-07-04

go语言不支持aop吗

go语言支持aop。AOP是指面向切面编程,是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术;AOP是面向对象中的一种方式,主要应用场景:日志记录,性能统计,安全控制,事务处理,异常处理等等。
2023-05-14

go语言是不是只能开发服务端

本篇内容介绍了“go语言是不是只能开发服务端”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!不是。go语言还可以:1、开发分布式系统、数据库代
2023-07-04

GRPC 是否更倾向于 Go 语言?

来到编程网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《GRPC 是否更倾向于 Go 语言?》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!GRPC 是一种高性能、跨语言的远程
GRPC 是否更倾向于 Go 语言?
2024-04-04

go语言支持xp的版本是什么

这篇“go语言支持xp的版本是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言支持xp的版本是什么”文章吧。go语
2023-07-04

go语言是不是易语言

本篇内容介绍了“go语言是不是易语言”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!go语言不是易语言,两者是不同的编程语言。go语言(又称G
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录