protobuf与protoc
Catalog
- protobuf定义
- 优势
- 应用场景
- 语法规则
- 定义消息类型
- option
- 可选的值
- field number
- protoc
- 定义
- protoc 、工具与插件
- 定制代码生成插件
- 使用
- 例子
- 参考
protobuf定义
protocol buffer 是谷歌出品的语言独立,平台独立,可扩展的结构化数据序列化的组件就像XML一样,但是protocol buffer编码后更小、速度更快、使用更简单。定义完你的结构化数据后,就可以使用配套工具生成的代码,使用不同的语言对结构化数据流进行读取和操作
,
优势
- 简单
- 速度更快(相对于JSON、XML)
- 体积更小(相对于JSON、XML)
- 语言独立、平台独立(amazing)
应用场景
语法规则
定义消息类型
语法message <messageName>{[field rules] <field type> <field name> =<field number>;}
message SearchRequest {required string query = 1;optional int32 page_number = 2;optional int32 result_per_page = 3;enum Corpus {UNIVERSAL = 0;WEB = 1;IMAGES = 2;LOCAL = 3;NEWS = 4;PRODUCTS = 5;VIDEO = 6;}optional Corpus corpus = 4 [default = UNIVERSAL];
}
option
option allow_alias = true;//允许将同一个field number赋值给多个枚举变量
可选的值
- optional 字段可选
- required 字段必须存在
- repeated 此字段可以被重复任何次数(包含0),相当于数组
field number
- field number:用来在消息二进制编码中标识字段
- 范围: 0<n<2^30
- tips:对于1-15编码后字段为1个字节,对于>=16的field number 编码后为两个字节
protoc
定义
- protoc 是protobuf的编译器,用于将.proto文件生成目标语言的代码。
- protoc
protoc 、工具与插件
对于--xx_out参数,protoc在运行时会先去找xx工具,如果没找到会再去找protoc-gen-xx,然后使用对应的工具来生成代码,这里生成的代码不包含service,如何去生成service对应的代码呢,这里就需要指定对应语言工具所带的插件,为什么要指定插件呢,因为RPC有很多种时间方式,通过指定不同的插件来生成不同RPC实现方式的对应代码,good
定制代码生成插件
待填坑
使用
- terminal on *nix| cmd on windows,直接输入protoc 即可查看帮助信息
protoc
例子
# 使用protoc-gen-go工具与它携带的grpc插件来生成rpc代码,输入文件为 hello.proto ,输出的目录为 .(当前目录)
protoc --go_out=plugins=grpc: . hello.proto
参考
- DOC protobuffers google官方文档
- BOOK go语言高级编程
protobuf与protoc相关推荐
- 【Android Protobuf 序列化】Protobuf 使用 ( protoc 编译器简介 | 下载 protoc 编译器 | 使用 protoc 编译器编译 .proto 源文件 )
文章目录 一.protoc 编译器简介 二.下载 protoc 编译器 三.使用 protoc 编译器编译 addressbook.proto 源文件 四.参考资料 一.protoc 编译器简介 在上 ...
- 【grpc02】安装protobuf和protoc
目录 Windows环境 下载通用编译器 配置环境变量 安装go专用的protoc的生成器 GoLang中安装插件 如何使用protobuf呢? Mac环境 Protoc安装 Protoc-gen-g ...
- 深入理解 ProtoBuf 原理与工程实践(概述)
ProtoBuf 作为一种跨平台.语言无关.可扩展的序列化结构数据的方法,已广泛应用于网络数据交换及存储.随着互联网的发展,系统的异构性会愈发突出,跨语言的需求会愈加明显,同时 gRPC 也大有取代R ...
- 【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )
文章目录 一.TCP 粘包和分包 二.TCP 粘包和分包解决方案 三.客户端 Android 应用使用 Protobuf 四.服务器端 Java 服务器使用 Protobuf 五.参考资料 一.TCP ...
- 【Android Protobuf 序列化】Protobuf 使用 ( protobuf-gradle-plugin 插件简介 | Android Studio 中配置插件 | AS 中编译源文件 )
文章目录 一.protobuf-gradle-plugin 插件简介 二.Android Studio 中配置 protobuf-gradle-plugin 插件 三.Android Studio 中 ...
- php protobuf 性能,php中使用protobuffer
Protobuf 简介 protobuf(Protocol buffers)是谷歌出品的跨平台.跨语言.可扩展的数据传输及存储的协议,是高效的数据压缩编码方式之一. Protocol buffers ...
- Burpsuite中protobuf数据流的解析 - Vincent
0×00 前言 对于protobuf over-HTTP的数据交互方式Burpsuite不能正确的解析其中的数据结构,需要Burpsuite扩展才能解析,笔者使用mwielgoszewski的burp ...
- php protobuf 二进制,PHP环境中使用ProtoBuf数据格式
1.syntax="proto3":表明使用的是proto3格式,如果不指定则为proto2 2.package test:定义包名为test,生成类时,会产生一个目录为test ...
- protobuf版本常见问题
protobuf版本常见问题 许多软件都依赖 google 的 protobuf,我们很有可能在安装多个软件时重复安装了多个版本的 protobuf,它们之间很可能出现冲突并导致在后续的工作中出现版本 ...
- Protobuf生成Java代码(Maven)
1.说明 本文介绍Protobuf生成Java代码的方法, 配置对应的Maven插件, 把.proto文件生成Java代码. 2.插件配置 创建Maven工程grpc-compile, 修改pom.x ...
最新文章
- Java程序员3面小米,被俩算法题难倒,微软员工6分钟解决,真丢脸
- 添加javascript代码:_JavaScript的使用
- 关于 uniqueidentifier
- 让开发自动化持续重构 --使用静态分析工具识别代码味道
- Unet项目解析(2):./src/retinaNN_training.py
- java JSONObject
- P4495-[HAOI2018]奇怪的背包【数论,dp】
- 栅格像元做地理坐标映射后的坐标值是像元中心点还是其他位置?
- 西电计算机科学院实践中心,计算机基础教学实验中心
- python爬取微博热搜并存入表格_python爬虫进阶之爬取微博热搜存入Mysql
- C++ zip压缩库使用
- 报错:TargetException, 非静态方法需要一个目标
- RHEL5下unixODBC 与 sqliteodbc 连接配置
- 《深入浅出Python机器学习》读书笔记 第一章 概述
- 服务器组态文件己写保护,组态王常见问题集锦(一)
- 已有的MGR集群上配置InnoDB Cluster
- 如何从Excel文件创建在线预算报告
- 【VSCode】解决Java项目的Referenced Libraries (Read-only)问题
- 数学149的女学霸,直言想当程序员!女生当程序员到底行不行?
- 自定义控件三部曲之动画篇(七)——ObjectAnimator基本使用
热门文章
- Hive教程(08)- JDBC操作Hive
- ECTOUCH广告图片轮播间隔调整 ECTOUCH教程
- coreos mysql_CoreOS 实战:在 UOS上体验CoreOS 操作全记录
- java初级工程师职责_Java初级开发工程师工作的岗位职责
- Matlab中freqz函数使用
- 显卡硬解4k测试软件,对飙4K硬解 看谁才是笑到最后的大佬
- 北理珠计算机专业在广东排第几,【我们的珠澳】再破纪录!北师珠、吉珠、北理珠这几天要在全国出名了!...
- Python数据挖掘-文本挖掘
- 2021数学建模B题及思路
- 如何用python做无限弹窗_Python无限弹窗,开机启动,打包为exe程序