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相关推荐

  1. 【Android Protobuf 序列化】Protobuf 使用 ( protoc 编译器简介 | 下载 protoc 编译器 | 使用 protoc 编译器编译 .proto 源文件 )

    文章目录 一.protoc 编译器简介 二.下载 protoc 编译器 三.使用 protoc 编译器编译 addressbook.proto 源文件 四.参考资料 一.protoc 编译器简介 在上 ...

  2. 【grpc02】安装protobuf和protoc

    目录 Windows环境 下载通用编译器 配置环境变量 安装go专用的protoc的生成器 GoLang中安装插件 如何使用protobuf呢? Mac环境 Protoc安装 Protoc-gen-g ...

  3. 深入理解 ProtoBuf 原理与工程实践(概述)

    ProtoBuf 作为一种跨平台.语言无关.可扩展的序列化结构数据的方法,已广泛应用于网络数据交换及存储.随着互联网的发展,系统的异构性会愈发突出,跨语言的需求会愈加明显,同时 gRPC 也大有取代R ...

  4. 【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )

    文章目录 一.TCP 粘包和分包 二.TCP 粘包和分包解决方案 三.客户端 Android 应用使用 Protobuf 四.服务器端 Java 服务器使用 Protobuf 五.参考资料 一.TCP ...

  5. 【Android Protobuf 序列化】Protobuf 使用 ( protobuf-gradle-plugin 插件简介 | Android Studio 中配置插件 | AS 中编译源文件 )

    文章目录 一.protobuf-gradle-plugin 插件简介 二.Android Studio 中配置 protobuf-gradle-plugin 插件 三.Android Studio 中 ...

  6. php protobuf 性能,php中使用protobuffer

    Protobuf 简介 protobuf(Protocol buffers)是谷歌出品的跨平台.跨语言.可扩展的数据传输及存储的协议,是高效的数据压缩编码方式之一. Protocol buffers ...

  7. Burpsuite中protobuf数据流的解析 - Vincent

    0×00 前言 对于protobuf over-HTTP的数据交互方式Burpsuite不能正确的解析其中的数据结构,需要Burpsuite扩展才能解析,笔者使用mwielgoszewski的burp ...

  8. php protobuf 二进制,PHP环境中使用ProtoBuf数据格式

    1.syntax="proto3":表明使用的是proto3格式,如果不指定则为proto2 2.package test:定义包名为test,生成类时,会产生一个目录为test ...

  9. protobuf版本常见问题

    protobuf版本常见问题 许多软件都依赖 google 的 protobuf,我们很有可能在安装多个软件时重复安装了多个版本的 protobuf,它们之间很可能出现冲突并导致在后续的工作中出现版本 ...

  10. Protobuf生成Java代码(Maven)

    1.说明 本文介绍Protobuf生成Java代码的方法, 配置对应的Maven插件, 把.proto文件生成Java代码. 2.插件配置 创建Maven工程grpc-compile, 修改pom.x ...

最新文章

  1. Java程序员3面小米,被俩算法题难倒,微软员工6分钟解决,真丢脸
  2. 添加javascript代码:_JavaScript的使用
  3. 关于 uniqueidentifier
  4. 让开发自动化持续重构 --使用静态分析工具识别代码味道
  5. Unet项目解析(2):./src/retinaNN_training.py
  6. java JSONObject
  7. P4495-[HAOI2018]奇怪的背包【数论,dp】
  8. 栅格像元做地理坐标映射后的坐标值是像元中心点还是其他位置?
  9. 西电计算机科学院实践中心,计算机基础教学实验中心
  10. python爬取微博热搜并存入表格_python爬虫进阶之爬取微博热搜存入Mysql
  11. C++ zip压缩库使用
  12. 报错:TargetException, 非静态方法需要一个目标
  13. RHEL5下unixODBC 与 sqliteodbc 连接配置
  14. 《深入浅出Python机器学习》读书笔记 第一章 概述
  15. 服务器组态文件己写保护,组态王常见问题集锦(一)
  16. 已有的MGR集群上配置InnoDB Cluster
  17. 如何从Excel文件创建在线预算报告
  18. 【VSCode】解决Java项目的Referenced Libraries (Read-only)问题
  19. 数学149的女学霸,直言想当程序员!女生当程序员到底行不行?
  20. 自定义控件三部曲之动画篇(七)——ObjectAnimator基本使用

热门文章

  1. Hive教程(08)- JDBC操作Hive
  2. ECTOUCH广告图片轮播间隔调整 ECTOUCH教程
  3. coreos mysql_CoreOS 实战:在 UOS上体验CoreOS 操作全记录
  4. java初级工程师职责_Java初级开发工程师工作的岗位职责
  5. Matlab中freqz函数使用
  6. 显卡硬解4k测试软件,对飙4K硬解 看谁才是笑到最后的大佬
  7. 北理珠计算机专业在广东排第几,【我们的珠澳】再破纪录!北师珠、吉珠、北理珠这几天要在全国出名了!...
  8. Python数据挖掘-文本挖掘
  9. 2021数学建模B题及思路
  10. 如何用python做无限弹窗_Python无限弹窗,开机启动,打包为exe程序