当前位置:网站首页>想通讯?谈钱多俗,谈ProtoBuf

想通讯?谈钱多俗,谈ProtoBuf

2022-07-16 09:46:00 InfoQ

大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能code下能teach的全能奶爸
如果您喜欢我的文章,可以[关注]+[点赞]+[评论],您的三连是我前进的动力,期待与您共同成长~


什么是ProtoBuf

protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。

protobuf对于结构中的每个成员会提供set系列函数和get系列函数。与XML相比,protoBuf更小更快更简单。你可以用定义protobuf的数据结构。用protobuf编译器生成特定语言的源代码,如C++,Java,Python等。

ProtoBuf的优点:

  • 平台无关、语言无关
  • 二进制、数据字描述
  • 提供了完整详细的操作API
  • 高性能比XML要快20-100倍
  • 尺寸小比XML要小3-10倍高可扩展性
  • 数据字描述前后兼容

ProtoBuf的缺点:

  • 语言覆盖度低,官方支持java、c++、python语言环境
  • 自定义protobuf的工作量偏大

为什么是ProtoBuf

ProtoBuf使用的最佳场景,就是制定协议。

只要只官方支持的语言环境,只需要制定一套协议,大家可以各自生成自己的解析工具,接收到协议后进行解析。

协议也是支持变更的,在一定情况下,也不会影响低版本的协议解析,所以一方针对某些场景进行升级时,不用通知所有的终端,只需要相应有依赖的终端进行升级即可。

ProtoBuf的数据是用二进制存储的,本身相比json或者xml数据存储就小,如果再加上压缩,那会更加降低带宽。

如何使用ProtoBuf

在pom中配置相关jar包

<dependency>
 <groupId>com.google.protobuf</groupId>
 <artifactId>protobuf-java</artifactId>
 <version>3.7.1</version>
</dependency>

在build中添加配置

<build>
 <defaultGoal>package</defaultGoal>
 <extensions>
 <extension>
 <groupId>kr.motd.maven</groupId>
 <artifactId>os-maven-plugin</artifactId>
 <version>1.5.0.Final</version>
 </extension>
 </extensions>
 
 <plugins>
 <!-- protobuf 编译组件 -->
 <plugin>
 <groupId>org.xolstice.maven.plugins</groupId>
 <artifactId>protobuf-maven-plugin</artifactId>
 <version>0.5.1</version>
 <extensions>true</extensions>
 <configuration>
 <protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
 <protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact>
 </configuration>
 <executions>
 <execution>
 <goals>
 <goal>compile</goal>
 </goals>
 </execution>
 </executions>
 </plugin>
 
 <!-- 编译jar包的jdk版本 -->
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>3.1</version>
 <configuration>
 <source>${java.version}</source>
 <target>${java.version}</target>
 </configuration>
 </plugin>
 </plugins>
</build>

将需要编译的proto文件放入/src/main/proto目录下

使用命令或者使用idea的Plugins工具进行编译

mvn protobuf:compile


结束语

如果您喜欢我的文章,可以[关注]+[点赞]+[评论],您的三连是我前进的动力,期待与您共同成长~
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/92066cde961ce2d2ceaec446d