Google Protocol Buffer -- Windows下Python的应用


一、参考资料


跨语言通信方案的比较—Thrift、Protobuf和Avro

Google Protobuf 3版本介绍

Google Protocol Buffer 简单介绍

python+protobuf 在python中使用protocol buffer

Protobuf3语言指南

Protobuf协议的Java应用例子



二、Protobuff安装







下载到本地



解压后重命名文件夹如下【也可以保持原有的文件夹名不动】






三、protoc.exe编译器下载


百度网盘: protoc-3.5.1-win32.zip

下载解压后,将文件夹bin下面的exe执行程序拷贝到上一步的protobuff目录任意文件夹下




比如放在src目录下





配置系统环境变量 【Path】





启动CMD,输入protoc,验证配置是否成功





我们可以看到编译器的一些参数,其支持输出的语言类型包括C++,C#,Python,Java等






四、简单proto文件编写


Protocol Buffers是一个更灵活、高效、自动化的解决方案。它通过一个.proto文件描述我们想要的数据结构


比如:





syntax = "proto3";
message Person {  
  int32  id    = 1 ;  //message体内的字段序号从1开始往下排  
  string name  = 2 ;  
} 



上述定义了一个消息体,名称是Person,编译后等同于Python的模块、Java的类、C++的头和源文件,其中有两个字段,一个是32位的id,一个是字符串name


关于proto的字段类型有哪些,可以参考:Protocol Buffer 语法(syntax)




五、Windows下,Python配置probuff环境



切换到最开始我们下载的protocol的目录下,找到python文件夹,进去,依次执行


python setup.py build

python setup.py test

python setup.py install



执行前目录结构:





执行后:






六、Python使用Protobuf



将person.proto文件放到任意目录下,最好是python的工作目录下,比如我的放在D盘的proto目录下





有了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这个对象的信息如下






猜你喜欢

转载自blog.csdn.net/appleyk/article/details/80680671