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的垃圾回收机制深入分析
Jul 16 Python
关于反爬虫的一些简单总结
Dec 13 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
Feb 21 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
python实现动态创建类的方法分析
Jun 25 Python
python 计算方位角实例(根据两点的坐标计算)
Jan 17 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
Jun 03 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
Python中的特殊方法以及应用详解
Sep 20 Python
python​格式化字符串
Apr 20 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
9个实用的PHP代码片段分享
2015/01/22 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
Textarea输入字数限制实例(兼容iOS&安卓)
2017/07/06 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
硕士研究生个人求职信
2013/12/04 职场文书
益达广告词
2014/03/14 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
Python+Appium实现自动抢微信红包
2021/05/21 Python