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函数编程的一些特性
Apr 13 Python
Python psutil模块简单使用实例
Apr 28 Python
Python实现栈的方法
May 26 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
Python 分享10个PyCharm技巧
Jul 13 Python
python django model联合主键的例子
Aug 06 Python
python中什么是面向对象
Jun 11 Python
python GUI计算器的实现
Oct 09 Python
Python修改DBF文件指定列
Dec 19 Python
python绘制箱型图
Apr 27 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
简单采集了yahoo的一些数据
2007/02/14 PHP
PHP session有效期问题
2009/04/26 PHP
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
jquery的index方法实现tab效果
2011/02/16 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
跟老齐学Python之for循环语句
2014/10/02 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
什么是servlet链?
2014/07/13 面试题
机械工程学院大学生求职信
2014/05/25 职场文书
教师节主持词开场白
2015/05/29 职场文书
2015大学迎新晚会策划书
2015/07/16 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers