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读写docx文件的方法
May 08 Python
Django框架使用mysql视图操作示例
May 15 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
python 计算平均平方误差(MSE)的实例
Jun 29 Python
10个Python面试常问的问题(小结)
Nov 20 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
pytorch进行上采样的种类实例
Feb 18 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
Python偏函数实现原理及应用
Nov 20 Python
Python中os模块的简单使用及重命名操作
Apr 17 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 字符转义 注意事项
2009/05/27 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
php数组分页实现方法
2016/04/30 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
招商引资工作汇报材料
2014/10/28 职场文书
2014年质量工作总结
2014/11/22 职场文书
2015年企业新年寄语
2014/12/08 职场文书
护士实习自荐信
2015/03/06 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
企业年会祝酒词
2015/08/11 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
redis数据结构之压缩列表
2022/03/21 Redis