跨语言通信方案的比较—Thrift、Protobuf和Avro
Google Protobuf 3版本介绍
Google Protocol Buffer 简单介绍
python+protobuf 在python中使用protocol buffer
Protobuf3语言指南
Protobuf协议的Java应用例子
解压后重命名文件夹如下【也可以保持原有的文件夹名不动】
下载解压后,将文件夹bin下面的exe执行程序拷贝到上一步的protobuff目录任意文件夹下
比如放在src目录下
配置系统环境变量 【Path】
启动CMD,输入protoc,验证配置是否成功
我们可以看到编译器的一些参数,其支持输出的语言类型包括C++,C#,Python,Java等
比如:
syntax = "proto3";
message Person {
int32 id = 1 ; //message体内的字段序号从1开始往下排
string name = 2 ;
}
上述定义了一个消息体,名称是Person,编译后等同于Python的模块、Java的类、C++的头和源文件,其中有两个字段,一个是32位的id,一个是字符串name
关于proto的字段类型有哪些,可以参考:Protocol Buffer 语法(syntax)
切换到最开始我们下载的protocol的目录下,找到python文件夹,进去,依次执行
python setup.py build
python setup.py test
python setup.py install
执行前目录结构:
执行后:
有了proto文件,我们需要用protoc.exe工具将其编译成Python语言可以识别的Person模块【py】
编译命令: protoc -I=输入目录 --python_out=python模块的输出目录 空格 proto文件的绝对路径
打开CMD窗口,由于protoc.exe的环境变量已配置,所以比着上面的模子在窗口中写:
protoc -I=D:/proto --python_out=D:/proto D:/proto/person.proto
不报错就OK,随后,我们可以看到同目录下多了一个文件出来
别小看person.proto这个文件,这个文件可是跨语言的二进制协议文件,也就是我们只需要定义通信的message体,即可实现C++、Java、Python、JS、PHP等语言平台之间的通信,而且这种传输效率很高,后续我会针对Python和Java这两种语言实现基于这种传输协议的Web Restful接口的调用
话不多说,我们在当前目录下,新建一个demo模块,并引入模块person_pb2.py如下
随后我们可以从这个模块中拿出一个person的对象,并很嗨皮的给其附上对应的属性值,如下
我们看一下person_pb2.py这个模块中的属性字段怎么定义的
最后,我们执行下,打印一下person这个对象的信息如下