Python传输解析PB消息Client段程序

2024-03-13 17:38

本文主要是介绍Python传输解析PB消息Client段程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考链接

  • http://blog.csdn.net/huithe/article/details/5223785

程序中使用python直接通过protobuf协议访问服务器,当服务器返回的数据比较大的时候,client端在接收数据之前,需要sleep一段时间,否则接收到的数据会不完整,然后解析出错。

pb文件内容如下:

package bse.bsp.triggerserver;message TriggerRequest {required uint32 client_id    = 1;    /*请求id*/required uint64 idea_id      = 2;    /*idea_id*/required bytes title         = 3;    /*原始title字面*/
};message TriggerInfo {required uint64 query_sign   = 1;required bytes relv_score    = 2;required bytes query         = 3;required uint64 wmatch       = 4;     /*一个query被多种方式挖掘到*/required uint64 fea_sign     = 5;     /*所有特征拼接在一起的签民*/
};message TriggerResponse {required uint64 idea_id      = 1;required uint32 update_time  = 2;    /*更新时间*/repeated TriggerInfo trigger_info_list = 3; /*query信息*/
};

生成pb的python依赖包

protoc -I=. --python_out=../interface ./trigger_server.proto

client端代码如下:

    # !/usr/bin/env python# -*- coding:gbk -*-import structimport socketimport timeimport syssys.path.append('./interface/')import trigger_server_pb2class TriggerClient(object):def __init__(self, ip, port):self.ip = ipself.port = portself.address = (ip, port)self.id = 0self.version = 0self.log_id = 0self.provider = "trigger_server"self.magic_num = int('949370fb', 16)self.reserverd = 0self.buf_size = 102400def talk(self, title):request = trigger_server_pb2.TriggerRequest()request.client_id = 1request.idea_id = 123456request.title = titletry:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.connect(self.address)msg = request.SerializeToString()body_len = struct.unpack('<I', struct.pack('>I', len(msg)))[0]nshead = struct.pack('!HHI16sIII',self.id,self.version,self.log_id,self.provider,self.magic_num,self.reserverd,body_len)packet = nshead + msgsock.send(packet)time.sleep(0.5)data = sock.recv(self.buf_size)response = trigger_server_pb2.TriggerResponse()body = data[len(nshead):]response.ParseFromString(body)for i in range(len(response.trigger_info_list)):query = response.trigger_info_list[i].queryprint queryexcept Exception, e:print eprint "exception occur"def main():relv_client = TriggerClient('10.95.22.53', 8757)input = sys.argv[1]output = sys.argv[2]with open(input, 'r') as fin, open(output, 'w') as fout:for line in fin:parts = line.rstrip().split('\\t')if len(parts) != 1:continuetitle = parts[0]relv_client.talk(title)if __name__ == "__main__":main()

这篇关于Python传输解析PB消息Client段程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/805650

相关文章

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可