这里web框架选择flask。原因是简单,可快速编写demo。
pc环境: windows
1. 环境配置
1.1 安装python3
1.2 使用pip安装flask和protocbuf
pip install flask
pip install protobuf
1.3 配置protoc
去github下载对应和你PC对应版本的protoc。
1.4 pycharm安装protobuf插件
在plugins->Marketplace 搜索并安装这两款插件
2. .proto配置文件编写
简单的定义了一下请求和响应的字段。
3 使用protoc把配置文件转成python代码
protoc --python_out=./ ProtobufHandle.proto
然后当前目录下会生成与.proto文件名相似的python文件。
4 编写flask后台
# -*- coding: utf-8 -*-
from ProtobufHandle_pb2 import Request, Response
from flask import Flask, request
app = Flask(__name__)
@app.route("/protobuf", methods=["POST"])
def _protobuf():
# 解析请求
req = Request()
req.ParseFromString(request.get_data())
print(req)
# 编写响应
res = Response()
res.code = 200
d1 = res.data()
d1.id = "1"
d1.title = "哈哈"
d2 = res.data()
d2.id = "2"
d2.title = "嘿嘿"
res.dataList.append(d1)
res.dataList.append(d2)
return res.SerializeToString(), 200
if __name__ == '__main__':
app.run("0.0.0.0", port=8899)
需重点记住这两个api。SerializeToString 和 ParseFromString,分别对应的是序列化和反序列化。
5. 编写python脚本测试协议。
# -*- coding: utf-8 -*-
from ProtobufHandle_pb2 import Request, Response
import requests
def test_protobuf():
"""
test
:return:
"""
req = Request()
req.cate_id = "xiwang"
req.page = 1
req.pageSize = 10
req_data = req.SerializeToString()
response = requests.post("http://127.0.0.1:8899/protobuf", data=req_data)
res = Response()
res.ParseFromString(response.content)
print(res)
for i in res.dataList:
print(i.title)
if __name__ == '__main__':
test_protobuf()
最终效果如下:
Client端收到的响应:
Server端收到的请求:
下一篇:Android实现Protobuf客户端