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

news2024/12/23 8:31:23

个人名片
在这里插入图片描述
🎓作者简介: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 来进行简单的数据传输。在实际应用中,你可能需要对错误处理和数据验证等进行更多的考虑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tensorflow1基础函数学习

学习准备: 所需的库: tensorflow 1.12.0 numpy 1.19.5基本初始化函数 1.1 理解张量 tensor: 多维数组(列表), 阶:张量的维数 维数名字栗子0标量s 1, 2, 31向量v [1, 2, 3]2矩阵m [[1, …

uniapp 微信默认地图选点功能实现

效果图 配置项 微信公众平台-小程序配置 uniapp配置 上代码 <template><view class"content"><button click"toMap">请选择位置</button></view> </template><script setup lang"ts">function toMa…

Qt Style Sheets-使用样式表自定义 Qt 部件

使用样式表自定义 Qt 部件 在使用样式表时&#xff0c;每个小部件都被视为具有四个同心矩形的框&#xff1a;边距矩形、边框矩形、填充矩形和内容矩形。框模型对此进行了更详细的描述。 盒模型 以下是四个同心矩形在概念上的呈现方式&#xff1a; 边距超出边框。边框绘制在边…

【源码剖析】ThreadLocal 源码剖析

源码类注释 /*** This class provides thread-local variables. These variables differ from* their normal counterparts in that each thread that accesses one (via its* {code get} or {code set} method) has its own, independently initialized* copy of the variab…

鼠标录制工具怎么挑选?9款电脑鼠标录制工具分享(2024)

你知道鼠标录制工具吗&#xff1f;鼠标录制工具通过记录和回放用户的操作&#xff0c;帮助自动化重复性任务&#xff0c;提高工作效率和精确性。它可以帮助用户简化很多繁琐的操作步骤&#xff0c;非常适合运用在电脑自动化任务、游戏自动化中&#xff0c;给大家整理了2024年9款…

使用assembly插件来将外部文件夹打进jar包

目录&#xff1a; 1、pom文件的配置2、新建assembly的描述文件3、maven打包 1、pom文件的配置 <!--maven构建--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</ar…

代理模式(静态代理,动态代理,cglib代理)

文章目录 代理模式代理模式的角色静态代理案例代码抽象父类接口目标对象代理对象客户端使用输出结果 动态代理案例代码抽象父类与实现类代理工厂客户端 cglib代理引入依赖目标对象代理工厂客户端 代理模式 代理模式属于结构型的模式&#xff0c;通过代理对象来访问目标对象&am…

malloc底层实现

xv6实现的动态内存分配虽然只有不到100行代码&#xff0c;但却体现了动态内存分配的精髓&#xff0c;非常值得学习 xv6的内存布局 一谈到C语言的动态内存分配&#xff0c;就会想到堆以及malloc()和free()这两个函数。先来回顾一下XV6中的内存布局是怎样的&#xff0c;我们动态…

FPGA实训报告DAY 1(Verilog HDL)

实习日志与总结 日期&#xff1a;2024 年 7 月 10 日 星期三 姓名&#xff1a;XXX 一、实习日志 上午 9:00 - 9:30 按时到达工位&#xff0c;参加部门早会&#xff0c;了解了今天的实习任务和目标&#xff0c;即初步学习 FPGA 简介和 Verilog 基础语法知识。 9:30 - 10:30…

数据结构(5.2_1)——二叉树的基本定义和术语

二叉树的基本概念 二叉树是n(n>0)个结点的有限集合: 或者为空二叉树&#xff0c;即n0&#xff1b;或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一颗二叉树。 特点:每个结点至多只有两颗字数&#xff1b;左子树不能颠倒(二叉树…

2024牛客暑期多校第一场

H 一开始以为考后缀和&#xff0c;耽误了一会。后面直接看样例猜结论&#xff0c;数字乘位置为对答案的贡献 #include<bits/stdc.h>using namespace std;#define int long long #define PII pair<int,int>const int M1000000007;void solve() {int n;cin>>…

git 代理错误拒绝连接

git 克隆项目拒绝连接 现象 Failed to connect to 127.0.0.1 port 15732: 拒绝连接 问题描述 代理错误解决方法 取消代理 git config --global --unset http.proxy

MyBatis源码中的设计模式1

1. 建造者模式的应用 建造者模式属于创建类模式&#xff0c;通过一步一步地创建一个复杂的对象&#xff0c;能够将部件与其组装过程分开。用户只需指定复杂对象的类型&#xff0c;就可以得到该对象&#xff0c;而不需要了解其内部的具体构造细节。《Effective Java》中也提到&…

springboot的全局异常处理

主要有两个异常注解&#xff0c;RestControllerAdvice和 ExceptionHandler(Exception.class) 案例 package com.lwy.exception;import com.lwy.pojo.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotati…

类和对象的简述(c++篇)

开局之前&#xff0c;先来个小插曲&#xff0c;放松一下&#xff1a; 让我们的熊二来消灭所有bug 各位&#xff0c;在这祝我们&#xff1a; 放松过后&#xff0c;开始步入正轨吧。爱学习的铁子们&#xff1a; 目录&#xff1a; 一类的定义&#xff1a; 1.简述&#xff1a; 2…

飞睿智能UWB Tag蓝牙防丢器标签,宠物安全新升级,5cm精准定位测距不迷路

宠物早已成为许多家庭不可或缺的一员&#xff0c;它们用无条件的爱温暖着我们的心房&#xff0c;陪伴我们度过每一个平凡而温馨的日子。然而&#xff0c;随着宠物活动范围的扩大和外界环境的复杂多变&#xff0c;宠物走失的风险也随之增加。每一次出门遛弯&#xff0c;都像是心…

如何使用在线工具将手机相册中的图片转换为JPG格式

我们经常在手机相册中保存大量的图片&#xff0c;无论是家庭聚会的照片还是旅行的瞬间&#xff0c;每一幅图像都承载着珍贵的记忆。然而&#xff0c;有时候我们会遇到图片格式不兼容的问题&#xff0c;尤其是在需要将图片分享到特定平台或编辑时。 例如&#xff0c;某些社交平台…

PCIe EtherCAT实时运动控制卡PCIE464的IO与编码器读写应用

硬件介绍 PCIE464运动控制卡是正运动推出的一款EtherCAT总线脉冲型、PCIE接口式的运动控制卡&#xff0c;可选6-64轴运动控制&#xff0c;支持多路高速数字输入输出&#xff0c;可轻松实现多轴同步控制和高速数据传输。 PCIE464运动控制卡适合于多轴点位运动、插补运动、轨迹规…

Qt 多语言

记录Qt多语言的实现过程 目录 1.项目配置文件.pro配置 2.程序中的字符串用tr()封装 3.生成翻译文件 4.使用Qt语言家修改翻译文件 4.1使用Qt语言家打开 4.2 .更改文件配置 5. 生成qm文件 6.代码执行切换语言 6.1入口处 6.2 事件执行 0.效果 1.项目配置文件.pro配置 T…

观测云对接 Fluentd 采集业务日志最佳实践

概述 Fluentd 是一个开源数据收集器&#xff0c;专为简化日志管理和使日志数据更加易于访问、使用而设计。作为一个高度可扩展的工具&#xff0c;它能够统一数据收集和消费过程&#xff0c;使得构建实时分析的日志系统变得更加高效。 观测云目前已集成 Fluentd &#xff0c;可…