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 相关文章推荐
使用PDB模式调试Python程序介绍
Apr 05 Python
浅谈Python浅拷贝、深拷贝及引用机制
Dec 15 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
python实现桌面壁纸切换功能
Jan 21 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
一些关于python 装饰器的个人理解
Aug 31 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
python re的findall和finditer的区别详解
Nov 15 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 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
Laravel 5 学习笔记
2015/03/06 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
script标签的 charset 属性使用说明
2010/12/04 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
pygame播放音乐的方法
2015/05/19 Python
Python操作Word批量生成文章的方法
2015/07/28 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
pywinauto自动化操作记事本
2019/08/26 Python
python字符串格式化方式解析
2019/10/19 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
为什么说python更适合树莓派编程
2020/07/20 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
培训班开班仪式主持词
2014/03/28 职场文书
科技活动周标语
2014/10/08 职场文书
重阳节慰问信
2015/02/15 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers