之前学习Thrift时候,通讯的数据对象都是序列化,大大减少了通讯的传输内容所产生的大小 和传输过程中服务端和客户端所产生的开销,让我想起以前学习的protobuf ,这一节想总结下protobuf 开源库编译和实际使用
protobuf是google提供的一个开源序列化框架 ,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,也是可以支持跨平台跨语言的。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。protobuf在google中是一个比较核心的基础库,作为分布式运算涉及到大量的不同业务消息的传递,如何高效简洁的表示、操作这些业务消息在google这样的大规模应用中是至关重要的。而protobuf这样的库正好是在效率、数据大小、易用性之间取得了很好的平衡。
首先下载protobuf源码,我记得以前的代码是有VS工程的,但是我下载了最新的3.6.1版本发现,很有点蛋疼,竟然不提供vs工程了,后来查了下才知道,protobuf-3.0.0-alpha-3之后的版本均不提供vs的工程了,只有cmake版本的,恩,有点小难受,不过还是也顺带学习下CMake与VS编译器和nmake的结合使用来编译开源代码,就先尝试3.6.1版本的编译,如果这种方法用不习惯,自行下载后protobuf-3.0.0-alpha-3之前的版本,都是带vs版本的
https://github.com/protocolbuffers/protobuf/releases,下载protobuf-cpp-3.6.1.zip
https://cmake.org/download/,下载cmake-3.13.1-win64-x64.msi
然后安装cmake
下面开始使用cmake命令行与nmake生成器构建Makefile,然后用nmake编译项目
参考的这个链接https://www.cnblogs.com/rmthy/p/8462639.html 来编译的,结果很无语,namke那一步怎么都过不去,一直提示我atomic这个头文件,这个是c++11的头文件,不知道是不是我编译器是vs2010安装的c++11版本依赖太低还是咋了,也可能我编译器版本低了吧,果断去https://github.com/protocolbuffers/protobuf/releases找找,看哪个版本开始接入的c++11,发现protobuf-cpp-3.5.1.zip没有c++11,果断下载,然后参考链接操作,编译,最后成功了,我没有做前面的创建目录操作,直接运行的命令,在C:\Program Files\protobuf这个目录生成以下目录
后面就开始使用了,protobuf,网上很多例子