安裝protobuf環(huán)境
- 官網(wǎng)下載對應(yīng)的安裝包攒发,如windows下protoc-3.14.0-win64.zip
- 配置對應(yīng)的環(huán)境變量
編寫protobuf文件
// test.proto
syntax = "proto3";
message say_hello {
string name = 1;
int32 age = 2;
}
// 對應(yīng)的嵌套結(jié)構(gòu)、數(shù)組等可設(shè)置對應(yīng)的關(guān)鍵字配置
根據(jù)test.proto文件生成python文件
protoc --python_out=./ test.proto
編寫python服務(wù)和客戶端使用
- server.py
"""
Author: lxcos
Date: 2020-11-11 16:42:12
"""
import protoconf_pb2 as pb2
from flask import Flask
# 從給出的字符串中解析一條message
# sh.ParseFromString(msg)
# print(sh)
# print(f'name {sh.name}, {sh.age}')
app = Flask(__name__)
@app.route('/')
def index():
sh = pb2.say_hello()
sh.name = "chen"
sh.age = 23
# 序列化這個(gè)message和以字符串的方式返回。 注意,這是二進(jìn)行字節(jié),不是一個(gè)文本济锄; 我們只使用str類型作為一個(gè)方便的容器聊浅。
msg = sh.SerializeToString()
# print(msg)
return msg
if __name__ == '__main__':
app.debug = True # 設(shè)置調(diào)試模式餐抢,生產(chǎn)模式的時(shí)候要關(guān)掉debug
app.run()
- client.py
# encoding: utf-8
"""
Author: lxcos
Date: 2020-11-11 16:42:12
"""
import requests
import protoconf_pb2 as pb2
msg = requests.get("http://127.0.0.1:5000/")
sh = pb2.say_hello()
sh.ParseFromString(msg.content)
print(sh.name, sh.age)