个人名片
🎓作者简介:java领域优质创作者
🌐个人主页:码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站:www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?
- 专栏导航:
码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀
目录
- 服务器端代码(接收者)
- 客户端代码(请求者)
- 运行说明
下面是一个简单的基于 HTTP 通信和 Protobuf 数据传输的例子,包括客户端(请求者)和服务器端(接收者)。本例中,我们假设已经定义了一个 Protobuf 消息 Person
,它包含名字和年龄两个字段。
首先,你需要确保已经安装了必要的库,如果还没有安装,可以通过 pip 安装:
pip install protobuf flask requests
接下来,定义 Protobuf 消息格式。你可以在一个名为 person.proto
的文件中定义如下的消息:
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
}
生成 Python 代码:
protoc -I=. --python_out=. person.proto
这将生成一个 person_pb2.py
文件,包含 Person
类的定义。
服务器端代码(接收者)
服务器端将使用 Flask 框架来接收 HTTP 请求,解析 Protobuf 数据,并打印出来:
from flask import Flask, request, Response
import person_pb2
app = Flask(__name__)
@app.route('/submit', methods=['POST'])
def submit():
person = person_pb2.Person()
person.ParseFromString(request.data)
print(f"Received person: {person.name}, Age: {person.age}")
return Response("Person received", status=200)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
客户端代码(请求者)
客户端将使用 requests
库发送一个 HTTP 请求,内容是序列化的 Protobuf 数据:
import requests
import person_pb2
# Create a new Person
person = person_pb2.Person()
person.name = "John Doe"
person.age = 30
# Serialize the person
person_data = person.SerializeToString()
# Send the data
response = requests.post("http://localhost:5000/submit", data=person_data)
print(f"Server response: {response.text}")
运行说明
- 首先运行服务器端脚本。
- 然后运行客户端脚本,发送一个 Protobuf 序列化后的
Person
对象到服务器。 - 服务器接收到数据,解析并打印,然后响应客户端。
这个例子展示了如何在 Python 中使用 HTTP 和 Protobuf 来进行简单的数据传输。在实际应用中,你可能需要对错误处理和数据验证等进行更多的考虑。