Python实现基于http通信的protobuf数据传输的案例,包括请求者和接收者

个人名片
在这里插入图片描述
🎓作者简介: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}")

运行说明

  1. 首先运行服务器端脚本。
  2. 然后运行客户端脚本,发送一个 Protobuf 序列化后的 Person 对象到服务器。
  3. 服务器接收到数据,解析并打印,然后响应客户端。

这个例子展示了如何在 Python 中使用 HTTP 和 Protobuf 来进行简单的数据传输。在实际应用中,你可能需要对错误处理和数据验证等进行更多的考虑。

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农阿豪@新空间代码工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值