概述:

新公司用的平台和相关技术都与原公司使用的不同,原来是linux+thrift而现在换成了windows+protobuf了。

参考资料:

https://developers.google.com/protocol-buffers/docs/proto?hl=zh-CN

http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/

要点:

是什么:

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

以上是从网络上摘抄的定义。相同类别的东西有xml,josn,thirft。其中thrift更加相似。

怎么用:

首先,需要定义.proto文件--即定义要交换的数据结构;

其次,编译.proto文件--用网络上下载的编译器程序编译.proto文件,

根据编译选项会生成相应的文件(C++为.h/.cc文件);

最后,将编译生成的文件代码加入到项目中。

PS:使用protobuf既可以只定义协议数据格式也可以生成RPC接口。

.proto文件:

--数据格式:

数据结构体:message message_name{message_body;}

message_body格式:例如required int32 query=1[defaut=10];

形式为:rule type name=value[other_rule];

--规则:

规则有三个:

required表示必须具有该值域;

optional表示可选的值域;

repeated表示可重复的值域(即>=0);

其中requered/optional是常用rule,而repeated则不常用同时因为是历史

遗留现使用repeated int32 samples=4[packed=true];形式;

--value值:

value值最小为1,是底层编码时使用其中1-15占一位,>15则会占多位;

不同的message中的value值互不干扰,常以1开始计数。

--数据类型之基本类型:

.proto Type C++ Type Java Type
double double double
float float float
int32 int32 int
int64 int64 long
uint32 uint32 int
uint64 uint64 long
sint32 int32 int
sint64 int64 long
fixed32 uint32 int
fixed64 uint64 long
sfixed32 int32 int
sfixed64 int64 long
bool bool boolean
string string String
bytes string ByteString

--数据类型之复杂类型:

复杂类型主要包括:枚举,其他message,groups等。

枚举定义例如:enum Corpus{WEB=0;LOCAL=1}

枚举定义在message中。

可以使用其他message作为类型来定义成员。

groups我的理解有些像C++中的union结构。

--嵌套定义:

可以嵌套定义message结构,而嵌套定义的message被其他message作为

成员类型时需要形式为outmessage.inmessage形式。

--包结构:

定义形式:package foo.bar;

对应C++中则生成两个命名空间foo和bar,且bar定义在foo中;

可以通过import "myproject/other_protos.proto";来引入.proto文件;

引用其他package中message时需要完整的package路径;

--Services:

主要用于RPC系统中,在.proto中定义接口;

定义形式如例子:

service SearchService{

rpc Search(SearchRequest) return (SearchResponse);

}

.proto文件编译:

格式:

protoc –proto_path=IMPORT_PATH –cpp_out=DIST_DIR path/file.proto

其中可根据需要更改—cpp_out选项为java_out/python_out。

原理:

后续会增加

小结:

慢慢学习路...

转载于:https://www.cnblogs.com/davidyang2415/archive/2012/05/17/2505940.html

Google Protocol Buffer学习笔记(一)相关推荐

  1. windows下Google Protocol Buffer 编译安装(vs)教程

    蒲公英的博客 分享技术带来的快乐 Kuaile.IN 搜索 首页 安卓相关 WordPress 主机相关 Linux相关 网络技术 电脑技术 编程技术 免费资源 当前位置: 首页 > 编程技术 ...

  2. 【C++】Google Protocol Buffer(protobuf)详解(一)

    1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...

  3. Google Protocol Buffer 的使用和原理

    FROM : https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol ...

  4. 由Google Protocol Buffer的小例子引起的g++编译问题

    问题 学习 Google Protocol Buffer 的使用和原理时,提供了一个小例子,讲述了protobuf的使用方法. 假如已经有了如下文件: 其中writer.cpp如下: #include ...

  5. Google Protocol Buffer 的使用和原理(c++)

    简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Googl ...

  6. c++ java通信 protocol buffer,google protocol buffer (C++,Java序列化应用实例)

    google protocol buffer (C++,Java序列化使用实例) 转载,请注明出处: http://blog.csdn.net/eclipser1987/article/details ...

  7. 只用2000行代码实现google protocol buffer c++版的功能

    2019独角兽企业重金招聘Python工程师标准>>> google protocol buffer (下面简称gpb)功能强大,应用广泛,但在实际应用中,gpb需要写.proto脚 ...

  8. 前端后台以及游戏中使用Google Protocol Buffer详解

    前端后台以及游戏中使用Google Protocol Buffer详解 前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf 1.下载protobuf的编 ...

  9. Google Protocol Buffer(GPB)使用之完全解析一:没有GPB的日子怎么过?

    最近,我打算介绍一下一个好用的工具,即Google Protocol Buffer(GPB)的使用,这真的是一个非常有用的工具,你应该学它,并熟练使用它. 通常来讲,应该先介绍GPB是什么,但是,在这 ...

最新文章

  1. GLFW--Getting started
  2. Android防止系统休眠
  3. TensorFlow--实现人脸识别实验精讲 (Face Recognition using Tensorflow)
  4. DOM操作之属性和样式操作
  5. 开源MongoDB管理工具MongoCola1.20 发布 离开IBM GDC的最后一个版本
  6. malloc动态分配多维数组
  7. Django项目配置mysql主从数据库实现读写分离
  8. 在递归中使用Continuation来避免StackOverflow(查找第K大的数)
  9. python开发最受欢迎的十款工具
  10. 2步判断晶体管工作状态
  11. 数据结构上机实践第七周项目1 - 自建算法库——顺序环形队列
  12. cordova打包APP更改图标和APP名字
  13. 本地KMS虚拟服务器,搭建kms本地服务器
  14. 苹果iOS捷径(快捷指令)自动填写表单
  15. html 在线打开pdf文件,Html打开pdf、word、xls等文件
  16. 计算机网络软件组成,计算机网络软件的组成
  17. Lemon tree 柠檬树
  18. qq 表情gif免费下载
  19. EOS智能合约开发系列(十): 抵御彩虹攻击
  20. PPT封面设计的一些心得

热门文章

  1. SAX与DOM之间的区别 转帖
  2. rCNN学习笔记二:基于R-CNN的物体检测
  3. python接口封装_Python 接口测试之接口关键字封装
  4. html5光标进去默认值消失,html点击input没有出现光标怎么办
  5. oracle 快速关闭_快速关闭
  6. jdk和jre和jvm区别_JDK,JRE和JVM之间的区别
  7. fadein和fadeto_jQuery fadeIn,fadeOut,fadeTo
  8. Android版式– LinearLayout,RelativeLayout
  9. Spring Controller – Spring MVC控制器
  10. scala面试问题_Scala高级面试问答