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的Django框架完成视频处理任务的教程
Apr 02 Python
python 专题九 Mysql数据库编程基础知识
Mar 16 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
python删除过期log文件操作实例解析
Jan 31 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
Python后台开发Django会话控制的实现
Apr 15 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
Pandas之groupby( )用法笔记小结
Jul 23 Python
python垃圾回收机制(GC)原理解析
Dec 30 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 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 header功能的使用
2013/10/28 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
JS 常用校验函数
2009/03/26 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
2016/04/13 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
python实现SMTP邮件发送功能
2020/06/16 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
python实现转圈打印矩阵
2019/03/02 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
南京某公司笔试题
2013/01/27 面试题
销售顾问的岗位职责
2013/11/13 职场文书
优秀员工年终发言演讲稿
2014/01/01 职场文书
爱护公物标语
2014/06/24 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
返乡农民工证明
2015/06/24 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python
教你nginx跳转配置的四种方式
2022/07/07 Servers