首页 > 其他分享 >grpc的数据传输格式protobuf你了解吗?

grpc的数据传输格式protobuf你了解吗?

时间:2024-10-27 20:19:07浏览次数:3  
标签:编码 字节 grpc 61 字段 Address 数据传输 protobuf

文章目录


前言

本文档主要讲解protobuf中基础的编码规则。先整体描述protobuf数据格式的优势,然后讲解protobuf的编码规则,通过了解编码规则,让大家深入浅出的理解protobuf的优势。在讲解规则时,会用到大量的例子帮助大家理解,大家也可以跟着一起计算,如果有计算不符的地方,欢迎评论区留言探讨。感谢大家的关注,后续会持续更新go语言,中间件等相关编程内容。

一、grpc为什么要选择protobuf?

gRPC选择使用Protocol Buffers(protobuf)作为数据格式,因为它具有以下几个优点:

  1. 高效的序列化:protobuf使用二进制格式来序列化数据。相比JSON或XML这种基于文本的格式,protobuf格式的数据更小且更快,这有助于减少网络传输的数据量和处理时间,非常适合高性能的通信场景。
  2. 跨语言支持:protobuf支持多种编程语言,包括Go、Python、Java、C++等。借助protobuf定义的数据结构可以在不同语言的服务间传递数据,而不需要关注各自语言的实现细节。这种跨语言的兼容性使得gRPC能在分布式微服务中被广泛使用。
  3. 强类型和兼容性:protobuf使用强类型来定义数据结构,这样开发者在编写代码时就可以提前发现数据类型的问题。它还提供了良好的向后兼容和向前兼容的支持,即使在服务端或客户端更新了数据结构,也能保证老版本的客户端或服务端仍然能正常通信。
  4. IDL(接口定义语言):protobuf提供了一种接口定义语言(IDL)来定义服务和消息结构。使用.proto文件,我们可以直观地定义接口和数据模型,减少手工编码的工作量。在定义完成后,可以通过protobuf工具自动生成客户端和服务端的代码,这大大提升了开发效率。

二、Varint编码

protobuf使用Varint编码来压缩整型数据(例如 int32, int64, uint32, uint64)的存储,使得它在存储和传输整数时能够更高效、更节省空间。参考链接:https://protobuf.dev/programming-guides/encoding/#varints

2.1 字节序

  1. 大端序:高字节放低地址,低字节放高地址(符合书写习惯:从左到右)
  2. 小端序:高字节放高地址,低字节放低地址

假设我们有一个16位(2字节)数值0x1234(十六进制),它可以分成两个字节:
高字节:0x12
低字节:0x34
在大端序(Big-endian)中
如果该数值从地址0x1000开始存储,那么大端序会将高字节放在高地址,低字节放在低地址:
| 地址 | 数据 |
|0x1000 | 0x12|
| 0x1001 | 0x34 |
因此,在大端序中,数值0x1234会按照高位在前的顺序排列。
在小端序(Little-endian)中
为了对比,小端序会将低字节放在低地址,高字节放在高地址。仍然以地址0x1000为起始:
| 地址 | 数据 |
|0x1000 | 0x34|
| 0x1001 | 0x12 |

2.2定长编码

16位整型——2个字节
32位整型——4个字节
64位整型——8个字节

2.3变长编码

标签:编码,字节,grpc,61,字段,Address,数据传输,protobuf
From: https://blog.csdn.net/qq_41705360/article/details/143271168

相关文章

  • Netty、Go、Apache Tomcat、grpc-go、jetty、nghttp2、Apache Traffic Server是什么
    这些都是与网络编程和服务器应用相关的技术,下面我将分别简要介绍它们:Netty:Netty是一个异步事件驱动的网络应用程序框架,用于快速开发高性能、高可靠性的网络服务器和客户端程序。它支持多种协议,包括HTTP、HTTPS、FTP、SMTP等,广泛应用于游戏、移动、物联网、大数据等领域。......
  • c# grpc 保姆级教学搭建grpc框架 服务端、客户端
    文章目录基于已有class自动生成.proto文件grpc服务类库开发启动Grpc服务实现Grpc客户端基于已有class自动生成.proto文件如果想自己写.proto文件,可跳过这一步要转换成.proto文件的类usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;......
  • Ubuntu下 卸载protobuf并安装指定版本的protobuf
    Ubuntu下卸载protobuf并安装指定版本的protobuf1,卸载执行以下命令把protobuf相关文件夹及库文件删除即可sudorm/usr/local/bin/protoc//执行文件sudorm-rf/usr/local/include/google//头文件sudorm-rf/usr/local/lib/libproto*//库文件安装https://blog.c......
  • Protocol Buffer Error on compile during GOOGLE_PROTOBUF_MIN_PROTOC_VERSION check
    ProtocolBufferErroroncompileduringGOOGLE_PROTOBUF_MIN_PROTOC_VERSIONcheck出现这个问题一般是安装了多个版本protobufhttps://stackoverflow.com/questions/35744529/protocol-buffer-error-on-compile-during-google-protobuf-min-protoc-version-checkhttps://b......
  • 第41篇 Grpc实现客户端与服务端高效通信
    grpc的确是现在最流行的跨平台间的通信技术。远不止.net上使用。grpc是谷歌公司推出的跨语言平台之间的通信技术。和webapi不同的是,可以使用自己的语言和另一种语言进行通信。简单来讲就是首先使用一种Proto的协议文件,可以生成客户端和服务端两种文件。客户端和服务端可以使用任......
  • go grpc默认长连接
    google.golang.org/grpcv1.66.0conn,err:=grpc.NewClient("127.0.0.1:1000",grpc.WithTransportCredentials(insecure.NewCredentials()))启动后就会看到该连接。创建grpcclient,默认指定idleTimeout是30分钟。keepalive.ClientParametersTime表示建连多久之后,无grpc数......
  • 搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
    参考文章:安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客一、简单介绍本文开发环境,均为windows环境,mac环境其实也类似~①编译proto文件,相关插件简单介绍:protoc是编译器,用于将.proto文件编译成代码;protoc-gen-go是一个插件,用于生成Go语言的数据结构代......
  • netcore grpc
    netcoregrpc一、solution创建空解决方案>dotnetnewsln-nApricot.Grpc二、Grpc.Server创建Apricot.Grpc类库项目>dotnetnewclasslib-nApricot.Grpc#解决方案添加类库项目>dotnetslnaddApricot.Grpc/Apricot.Grpc.csproj安装依赖>dotnetaddp......
  • IoT平台软件:Google Cloud IoT二次开发_RESTfulAPI与gRPC
    RESTfulAPI与gRPCRESTfulAPI原理RESTfulAPI是一种基于HTTP协议的架构风格,用于构建分布式系统中的网络应用程序。它通过一组规则和约束来定义客户端和服务器之间的交互方式,使得系统更加简洁、可扩展和易于理解。RESTfulAPI的设计原则包括:无状态性:每个请求都必......
  • 【ProtoBuf】语法详解
    protoBuf的基础使用可参看ProtoBuf基础使用本篇博客依旧以通讯录为例展开讲解,语法为proto3当前通讯录属性如下:messagePeopleInfo{ stringname=1; int32age=2;}经过学习,实现通讯录如下功能:新增联系人属性,共包括:姓名,年龄,电话信息,地址,其他联系方式,备注将通讯录......