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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
学习python之编写简单简单连接数据库并执行查询操作
Feb 27 Python
Python实现的快速排序算法详解
Aug 01 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
解决PDF 转图片时丢文字的一种可能方式
Mar 04 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 Python
python tkinter Entry控件的焦点移动操作
May 22 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 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
MYSQL数据库初学者使用指南
2006/11/16 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
详解vue父子组件关于模态框状态的绑定方案
2019/06/05 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
python书籍信息爬虫实例
2018/03/19 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
中海讯通笔试题
2015/09/15 面试题
周年庆典邀请函范文
2014/01/24 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
检讨书范文300字
2015/01/28 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书