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 代码
Sep 07 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
Scrapy框架使用的基本知识
Oct 21 Python
python感知机实现代码
Jan 18 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
python异步编程 使用yield from过程解析
Sep 25 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 Python
Python datetime模块使用方法小结
Jun 18 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
通过Python pyecharts输出保存图片代码实例
Nov 25 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/12/18 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
PHP的反射机制实例详解
2017/03/29 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
jQuery 工具函数学习资料
2010/04/29 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
解析Python中的异常处理
2015/04/28 Python
Python创建xml文件示例
2017/03/22 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
广告学专业自荐信范文
2014/02/24 职场文书
《钱学森》听课反思
2014/03/01 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
python_tkinter事件类型详情
2022/03/20 Python