前言
在客户端和服务端数据传输交换中经常使用的技术是 JSON 或 XML,而小编最近在项目中接触到了一种新的数据传输框架——Protobuf,接下来我们就正式学习一下吧。
一、Protobuf介绍
简介
(1)Protocol Buffers(简称Protobuf) ,是Google出品的序列化框架,与开发语言、平台无关,具有良好的可扩展性;
(2)Protobuf和所有的序列化框架一样,都可以用于数据存储、通讯协议,是一种自动化机制的结构数据序列化方法。
优点
(1)更小——序列化后,数据大小可缩小约3倍;
(2)更高效——序列化速度更快,比XML和JSON快20-100倍,体积缩小后,传输时,带宽也会优化;
(3)更灵活——protoc编译器,自动进行序列化和反序列化;
(4)加密性好——HTTP传输内容抓包只能看到字节。
适应场景
在传输数据量大、网络环境不稳定的数据存储和RPC数据交换场景比较合适。
fiddler构造Protobuf数据响应
在测试中,经常需要做响应数据的容错,对于json格式的响应数据,大家都知道怎么做。但是对于Protobuf数据响应如何做数据容错呢?这时候我们可以通过python脚本来模拟数据响应。
下载fiddler插件
链接:https://pan.baidu.com/s/1MUVrBny4PgPmCDl4BPCHPg
提取码:9ags
工具下文件介绍
- Inspectors
fiddler插件dll,关闭fiddler,将里面的dll文件放到fiddler安装目录下Inspectors文件夹下;
- protobuf-net
Protobuf的C#依赖库和proto文件转换工具,将protobuf-net文件夹放到C:Progarm Files(X86) 目录下;
使用方法
上述步骤完成后,我们打开fiddler,就可以看到在Inspectors下出现Protobuf字段了,接下来我们就可以触发并查看数据流为Protobuf请求了,不会再是一堆二进制格式数据了;
fiddler构造Protobuf数据响应
在测试中,经常需要做响应数据的容错,对于json格式的响应数据,大家都知道怎么做。但是对于Protobuf数据响应如何做数据容错呢?这时候我们可以通过python脚本来模拟数据响应。
下载安装Python Protobuf
1、下载环境包https://github.com/protocolbuffers/protobuf/releases
2、下载好以后,解压缩,把protoc-3.14.0-win64文件夹下的protoc.exe复制到protobuf-python-3.14.0/src目录下;
3、进入protobuf-3.14.0/python目录下;
4、打开cmd,输入以下命令,编译并安装protobuf-python;
代码语言:javascript复制python setup.py build
python setup.py test
python setup.py install
5、查看protobuf-python是否安装成功
代码语言:javascript复制protoc --version
实现脚本
1、将需要修改的proto文件(服务端响应的protobuf格式数据)转换为python文件放到fiddler插件目录下,作为数据源;
(1)将proto文件放到C:Program Files (x86)protobuf-netprotobuf-net-VS9下,打开cmd;
(2)将当前文件夹下的proto文件编译为py文件,并且输出路径为当前文件夹;
代码语言:javascript复制protoc.exe ./XX.proto --python_out =./
注:./表示当前文件夹,--python_out表示编译为py文件
(3)将编译成功的XX.py文件放入python第三方库目录下,即XX/Lib/site-packages;
代码语言:javascript复制import quick_share_pb2 as qs #引用proto数据
from google.protobuf.json_format import MessageToJson #引入protobuf框架
(4)python脚本中引入编译成功的proto数据;
2、获取作为响应body的数据源,修改想要做容错的数据;
代码语言:javascript复制def __init__(self):
self.body = qs.ServerResponseBody() #获取服务端响应数据,即之前转化成功的proto数据
# update_infos=self.body.update_infos['whitenewlist']
container_properties = self.body.container_properties
self.body.request_class = 'soul'
container_properties['activeVpaDisappearTime'] = "30000"
container_properties['activeVpaUnfoldDisappearTime'] = "35000"
container_properties['isActiveVpa'] = "1"
container_properties['flags'] = "rrc:soul,type:soul,cv:10.12.1000"
container_properties['total_vpaminicards'] = "1"
container_properties['total'] = "0"
3、基于python中http.server 组件库,搭建服务器;
代码语言:javascript复制from http.server import BaseHTTPRequestHandler, HTTPServer
HOST = "10.129.XXX.44" #自己的IP
PORT = 89 #任意端口号
Handler = QuickShareHandler
httpd = HTTPServer((HOST, PORT), Handler)
httpd.serve_forever()
4、在fiddler中配置搭建的服务器IP:host;
5、打开fiddler,运行脚本,再返回的数据就是修改之后的内容了。
总结
以上是小编最近在项目中学习到Protobuf相关内容,还需要持续学习并挖掘,也欢迎大家来交流~
参考链接:http://venus.sogou-inc.com/AppStore/Wiki/Pages/WikiArticles.html?id=16768