官网入口https://developers.google.com...什么是protobufprotobuf是一个序列化&反序列化工具包,因为它是一个二进制协议,它是效率更高,并且支持多种语言的跨语言交流。与json、xml等协议不同的是,它需要通过.proto文件定义接口协议,然后使用proto工具生成的收发代码进行序列化和反序列化。(这种方式效率更高,因为双方都需要通过生成的代码来处理序列化后的内容,也就是说双方都知道字节流的“结构”,收到后只需要读取字节流的“内容”字段,而不是像json收到后分析判断结构)安装(官网github代码目录有官方安装指南)1安装yum开发工具包yum-ygroupinstall"DevelopmentTools"启动前安装2从官网下载解压包,下载后tar-zxf解压即可。在解压后的目录下执行如下,其中$INSTALL_DIR代表你要安装的目录。3本地python环境需要安装google包和protobuf包pipinstallgooglepipinstallprotobuf开始例1proto文件准备先写一个proto协议文件,然后用protoc读取proto文件生成序列化&反序列化代码。syntax="proto3";packagetutorial;messagePerson{可选字符串名称=1;可选的int32电子邮件=2;枚举PhoneType{MOBILE=0;家=1;}messagePhoneNumber{可选字符串number=1;可选PhoneTypetype=2;}repeatedPhoneNumberphones=4;}syntax="proto3"表示使用proto3版本,默认proto2.optional表示该字段可选。enum代表枚举类型,message代表复杂的信息结构,可以嵌套。2使用proto文件生成序列化&反序列化代码接下来,使用此命令读取proto文件并创建代码protoc-I=$SRC_DIR--python_out=$DST_DIRaddressbook.proto其中DST_DIR是序列化和反序列化代码directorySRC_DIR是proto文件的目录。如果不填,则默认使用当前目录。生成python代码,使用python_out3使用生成的代码进行序列化&反序列化,先序列化写入文件#!/usr/bin/envpython#-*-coding:utf-8-*-importtest_pb2deftest():person=test_pb2.Person()person.name="123"person.email=123phone=person.phones.add()phone.number="2345"phone.type=person.PhoneType.HOMEwithopen("file.txt","wb")asf:f.write(person.SerializeToString())returnif__name__=="__main__":test()passthenreadthefileanddeserialize#!/usr/bin/envpython#-*-编码:utf-8-*-importtest_pb2deftest():person=test_pb2.Person()withopen("file.txt","rb")asf:person.ParseFromString(f.read())print(person)data=person.phonesprint(data[0])if__name__=="__main__":test()passend吐槽官网例子不知道为什么proto2没有proto3很无语。.
