先说一句题外话:与Google Protocol Buffers类似的项目还有:源自Facebook的Thrift。
本文只陈述Linux下的情况。
(1)首先下载得到文件protobuf-2.3.0.tar.gz。
在Linux下,解压,然后请务必仔细看README.txt,文档的一开头就是说明在Unix下安装的注意事项。
安装过程为:
$ ./configure
$ make
$ make check
$ make install
注意第3步有个比较奇怪的“make check”,顾名思义,它是用来做检查的。如果“make check”失败了,你仍然可以安装,但是有可能Google Protocol Buffers的某些功能在你的系统上不能正常使用。“make check”过程消耗的时间比较长,要耐心等待。在这个过程中,会调用Google Test来进行测试,如果你用 过Google Test的话,就会知道那种全绿色的pass是多么令人赏心悦目。下面就是我在我的RHEL 5上的“make check”结果:
“make install”可能会需要超级用户权限。
默认安装路径是 /usr/local ,如果你要安装在其他路径,很容易,例如你想安装在 /usr ,只需要这样调用configure:
./configure --prefix=/usr
(2)Protocol Buffers文档有多个,如果你初次接触,可以按这样的顺序阅读其中的几个:Protocol Buffer Basics:C++,Language Guide,C++ Generated Code,……
(3)编译Protocol Buffers应用程序时,要使用-lprotobuf链接到其动态库或静态库。
(4)刚接触Protocol Buffers的朋友可能会问,Protocol Buffers要如何用在socket通信的通信协议中?可以大概地说一下:你需要根据你的协议编写一个.proto文件,此文件的格式是按Protocol Buffers的要求书写的。然后用Protocol Buffers编译器生成这个文件对应的类文件(包括一个.h文件和一个.cc文件),然后在你的程序中include生成的头文件,当需要发送socket消息的时候,先用这个类的对象的SerializeToString()方法,生成一个字符串,这个字符串也就相当于我们传统意义上的编码过的消息,然后在socket消息的接收方,使用ParseFromString()方法,就可以将消息中包含的数据解析到生成的类的成员变量中,就可以直接取出来用了。整个过程不需要你去考虑编码、解码,就算更改了协议,修改工作也非常方便。有时间的话,我会写一个比较详细的sample呈上来。
(未完待续)