python解析和打包protobuf

您所在的位置:网站首页 pb解析xml python解析和打包protobuf

python解析和打包protobuf

2023-03-21 10:40| 来源: 网络整理| 查看: 265

目录 隐藏 概述 安装和使用 1. 下载protobuf源代码 2. 解压,编译,安装 3. 安装完成,验证Linux命令 4. 继续安装protobuf的python模块(如果不用python,可跳过这一步) 5. 验证Python模块是否被正确安装 6. 根据test.proto生成python类test_pb2.py 7.解析测试 8.其他 概述

Protocol Buffers,简称protobuf或pb,是Google公司开发的一种数据描述语言,类似于XML和JSON能够将结构化数据序列化用于数据存储、通信协议等方面。目前官方支持C++、JAVA、Python等三种编程语言。

与XML和JSON相比,protobuf在配置时将数据key映射为递增数字,使用二进制传输,并能够根据schema自动生成各语言的打包、解析回kv的代码,非常方便各语言数据互通,且有以下优点:

1. 数据文件只需原来的1/10至1/3  #相同的数据,大小只有json的1/10 2. 解析速度是原来的20倍至100倍 3. 通过递增数字做key传输value,减少了二义性,在接口发生变化时完全像后兼容 4. 非常容易自动生成各语言中使用的数据访问类,将数据key根据schema自动转回易理解的英文key protobuf不是用来替代json和xml的,它最初的目的是为了更小的带宽占用、更快的传输速度,所以使用数据key+二进制传输,也产生了一些缺点: 1. 对人不可读。(适合加密数据传输) 2. 不能发给web浏览器,比如js无法处理这种数据。(适合c、java、python语言开发的程序间共享数据) 3. 开发适配成本高,不适合schema经常变的场景。(适合公司内部各产品间相对通用稳定的协议通信) 安装和使用

前提:需要gcc, gcc-c++, make, build等编译环境

yum -y install gcc gcc-c++ libstdc++-devel make build 1. 下载protobuf源代码 # proto2用下边这个包 wget https://blog.yanjingang.com/wp-content/uploads/2016/09/protobuf-2.5.0.tar.gz # proto3直接用最新release版即可:https://github.com/protocolbuffers/protobuf/releases  wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.4/protobuf-all-3.11.4.tar.gz

*注:使用python3+proto2时,python的protobuf库版本兼容性问题能把人折麽死(proto2主要为python2开发,最后一次发布是14年,对python3的兼容性极差),建议别在这个事情上浪费时间了,如果当前用的proto2,要么升级proto版本到3,要么降python版本到2。

2. 解压,编译,安装 tar zxvf protobuf-3.11.4.tar.gz cd protobuf-3.11.4 ./configure make make check make install 3. 安装完成,验证Linux命令 protoc --version >>libprotoc 3.11.4 4. 继续安装protobuf的python模块(如果不用python,可跳过这一步) cd ./python python setup.py build python setup.py test python setup.py install 5. 验证Python模块是否被正确安装 python >>>import google.protobuf 6. 根据test.proto生成python类test_pb2.py # 配置test.proto syntax="proto3"; package test.abc; //Test message Test { string name = 1; uint32 speed = 2; State state = 3; float time = 5; bytes content = 6; enum State { STATE_OFF = 0; STATE_STANDBY = 1; STATE_READY = 2; } }; # 生成pythhon类 protoc --python_out=./ ./test.proto #--python_out=生成的python文件输出路径   对应的proto文件 7.解析测试 from test_pb2 import Test test = Test() test.name='A' # 转pb msg = test.SerializeToString() #序列化这个message和以字符串的方式返回。 注意,这是二进行字节,不是一个文本; 我们只使用str类型作为一个方便的容器。 print(msg) # 解析pb test.ParseFromString(msg) #从给出的字符串中解析一条message print(test) 8.其他

如有前端js解析proto的需求,可以使用 protobuf.js 。

 

 

参考:

在Python中使用protocol buffers参考指南

https://github.com/protocolbuffers/protobuf/tree/master/src

google.protobuf.message

在Python 3.4里使用Protobuf 2.6

Language Guide (proto3)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3