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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
微信跳一跳游戏python脚本
Apr 01 Python
Python实现求数列和的方法示例
Jan 12 Python
对numpy中array和asarray的区别详解
Apr 17 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
基于python的ini配置文件操作工具类
Apr 24 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
python3爬虫中异步协程的用法
Jul 10 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封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
Python中的rjust()方法使用详解
2015/05/19 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
python的socket编程入门
2018/01/29 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Flask实现图片的上传、下载及展示示例代码
2018/08/03 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
python如何绘制疫情图
2020/09/16 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
学生打架检讨书
2014/02/14 职场文书
开学季活动策划方案
2014/02/28 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
一份文言文检讨书
2014/09/13 职场文书
教师个人教学总结
2015/02/11 职场文书
研究生个人学年总结
2015/02/14 职场文书
材料员岗位职责范本
2015/04/11 职场文书
董事长秘书工作总结
2015/08/14 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS