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探索之修改Python搜索路径
Oct 25 Python
Python生成器generator用法示例
Aug 10 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
如何使用python切换hosts文件
Apr 29 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
python3访问字典里的值实例方法
Nov 18 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
python制作图形界面的2048游戏, 基于tkinter
Apr 06 Python
Python基础之常用库常用方法整理
Apr 30 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 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
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
CI框架表单验证实例详解
2016/11/21 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
举例讲解AngularJS中的模块
2015/06/17 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
python显示生日是星期几的方法
2015/05/27 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
关于护士节的演讲稿
2014/05/26 职场文书
土木工程求职信
2014/05/29 职场文书
社区护士演讲稿
2014/08/27 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
基于Python实现流星雨效果的绘制
2022/03/18 Python