python Protobuf定义消息类型知识点讲解


Posted in Python onMarch 02, 2021

让我们从一个非常简单的例子开始。假设您想要定义“搜索请求”的消息格式。每个请求包含一个查询字符串、您对查询结果感兴趣的页数以及每页上有多少个查询结果。

可以采用如下的方式来定义消息类型的.proto文件了:

syntax = "proto3"; // 声明使用 proto3 语法
message SearchRequest {
string query = 1; // 每个字段都要指定数据类型
int32 page_number = 2; // 这里的数字2 是标识符,最小的标识号可以从1开始,最大到2^29 - 1, or 536,870,911。不可以使用其中的[19000-19999]
int32 result_per_page = 3; // 这里是注释,使用 //
}

(1)第一行指定了你正在使用 proto3 语法:如果不指定,编译器会使用 proto2。这个指定语法必须是文件的非空非注释的第一行。

(2)SearchRequest消息格式有三个字段,在消息中承载的数据分别对应于每一个字段。其中每个字段都有一个名字和一种类型。

(3)向.proto文件添加注释,可以使用C/C++/java风格的双斜杠(//) 语法格式。

(4)在消息体中,每个字段都有唯一的一个数字标识符。这些标识符用来在消息的二进制格式中识别各个字段,一旦开始使用就不能再改变。

知识点扩展:

Protobuf 不是一个自描述的协议,序列化后的二进制消息中应该没有必要的类型信息。所以采取往消息体中增加额外信息的方式来辅助确定消息类型。

  1. 使用枚举MsgType定义消息类型,每种消息对应一种消息类型
  2. 所有的消息都有一个消息类型字段,注意此字段的编号保持确定
  3. 定义辅助消息BaseMsg,只包含一个消息类型字段,用于辅助反序列化

到此这篇关于python Protobuf定义消息类型知识点讲解的文章就介绍到这了,更多相关python Protobuf定义消息类型内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python手机号码归属地查询代码
May 04 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 Python
Python如何使用函数做字典的值
Nov 30 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 Python
pyinstaller还原python代码过程图解
Jan 08 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
python小白学习包管理器pip安装
Jun 09 Python
在终端启动Python时报错的解决方案
Nov 20 Python
详解Django的MVT设计模式
Apr 29 Python
python 如何获取页面所有a标签下href的值
May 06 Python
Django项目在pycharm新建的步骤方法
Mar 02 #Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 #Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 #Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 #Python
Python实现我的世界小游戏源代码
Mar 02 #Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 #Python
python 基于pygame实现俄罗斯方块
Mar 02 #Python
You might like
解析thinkphp中的导入文件标签
2013/06/20 PHP
php里array_work用法实例分析
2015/07/13 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
php5.4传引用时报错问题分析
2016/01/22 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
JavaScript 数组运用实现代码
2010/04/13 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
python利用正则表达式提取字符串
2016/12/08 Python
python分割列表(list)的方法示例
2017/05/07 Python
Django框架多表查询实例分析
2018/07/04 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
某公司Java工程师面试题笔试题
2016/03/27 面试题
美术第二课堂活动总结
2014/07/08 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电