gRPC快速入门(一)——Protobuf简介

  

gRPC快速入门(一)——Protobuf简介

  

一、Protobuf简介

  

1, Protobuf简介

  

Protobuf即协议缓冲区,是谷歌公司开发的一种跨语言和平台的序列化数据结构的方式,是一个灵活的,高效的用于序列化数据的协议。
与XML和JSON格式相比,Protobuf更小,更快,更便捷.protobuf是跨语言的,并且自带一个编译器(protoc),只需要用protoc进行编译,就可以编译成Java、Python、c++, c#,去等多种语言代码,然后可以直接使用,不需要再写其它代码,自带有解析的代码。
只需要将要被序列化的结构化数据定义一次(在.proto文件定义),便可以使用特别生成的源代码(使用Protobuf提供的生成工具)轻松的使用不同的数据流完成对结构数据的读写操作,甚至可以更新.proto文件中对数据结构的定义而不会破坏依赖旧格式编译出来的程序。
GitHub地址:https://github.com/protocolbuffers/protobuf
不同语言源码版本下载地址:https://github.com/protocolbuffers/protobuf/releases/latest

  

2, Protobuf的优缺点

  

Protobuf的优点如下:
,性能号,效率高
序列化后字节占用空间比XML少3 - 10倍,序列化的时间效率比XML快20 - 100倍。
B,有代码生成机制
将对结构化数据的操作封装成一个类,便于使用。
C,支持向后和向前兼容
当客户端和服务器同时使用一块协议的时候,当客户端在协议中增加一个字节,并不会影响客户端的使用
D,支持多种编程语言
Protobuf目前已经支持Java、c++、Python、Ruby,等多种语言。

  

Protobuf的缺点如下:
,二进制格式导致可读性差
B,缺乏自描述

  

二,Protobuf编译器安装

  

1, c++版本Protobuf编译器安装

  

下载c++版本的Protobuf源码protobuf-cpp-3.6.1.tar。广州
解压Protobuf源码:
<代码>焦油-zxvf protobuf-cpp-3.6.1.tar.gz
进入protobuf-3.6.1源码目录:
<代码> cd protobuf-3.6.1
配置变量:
<代码>。/configure——prefix=/usr/地方/protobuf
编译:
<代码>使
检查,测试:
<代码>
进行核对安装:
<代码> sudo make install
设置环境变量:

  
 <代码>出口LD_LIBRARY_PATH=$ LD_LIBRARY_PATH:/usr/地方/protobuf/lib
  出口LIBRARY_PATH=$ LIBRARY_PATH:/usr/地方/protobuf/lib
  导出路径=$路径:/usr/地方/protobuf/bin  
  

检查版本号:
<代码> protoc——版本

  

2, Protobuf编译器使用

  

Protobuf提供了protoc编译器,用于通过定义好的。原型文件来生成Java、Python、c++, Ruby, objective - C, C #,去等语言代码。
<代码> protoc——proto_path=IMPORT_PATH cpp_out=DST_DIR——java_out=DST_DIR python_out=DST_DIR——go_out=DST_DIR ruby_out=DST_DIR——javanano_out=DST_DIR objc_out=DST_DIR——csharp_out=DST_DIR路径//file.proto
(1)导入目录设置
IMPORT_PATH声明了一个.proto文件所在的解析进口具体目录。如果忽略该值,则使用当前目录。如果有多个目录则可以多次调用proto_path,会顺序的被访问并执行导入。我=IMPORT_PATH是——proto_path的简化形式。
(2)生成代码指定

  
 <代码>——cpp_out:在目标目录DST_DIR中产生c++代码
  ——java_out:在目标目录DST_DIR中产生Java代码
  ——python_out:在目标目录DST_DIR中产生Python代码
  ——go_out:在目标目录DST_DIR中产生去代码
  ——ruby_out:在目标目录DST_DIR中产生Ruby代码
  ——javanano_out:在目标目录DST_DIR中生成JavaNano
  ——objc_out:在目标目录DST_DIR中产生对象代码
  ——csharp_out:在目标目录DST_DIR中产生对象代码
  ——php_out:在目标目录DST_DIR中产生对象代码 
  

(3)导入原型消息文件指定
必须指定一个或多个.proto文件作为输入,多个.proto文件可以只指定一次。虽然文件路径是相对于当前目录的,每个文件必须位于其IMPORT_PATH下,以便每个文件可以确定其规范的名称。
(4)生成编程语言相关代码
当用Protobuf编译器来运行.proto文件时,编译器将生成所选择语言的代码,相应语言的代码可以操作在.proto文件中定义的消息类型,包括获取,设置字段值,将消息序列化到一个输出流中以及从一个输入流中解析消息。
对c++语言,编译器会为每个 .proto文件生成一个 . h文件和一个.cc文件,.proto文件中的每一个消息有一个对应的类。
对Java语言,编译器为每一个消息类型生成了一个. Java文件以及一个特殊的构建器类(用来创建消息类接口的)。

gRPC快速入门(一)——Protobuf简介