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 28 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
Python文件及目录操作实例详解
Jun 04 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
解决python报错MemoryError的问题
Jun 26 Python
Python爬虫之网页图片抓取的方法
Jul 16 Python
python批量获取html内body内容的实例
Jan 02 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
python实现简单井字棋游戏
Mar 04 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
python 如何读、写、解析CSV文件
Mar 03 Python
Python实现简单得递归下降Parser
May 02 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生成便于打印的网页
2006/10/09 PHP
开发大型 PHP 项目的方法
2007/01/02 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
jquery移动节点实例
2015/01/14 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
微信小程序封装http访问网络库实例代码
2017/05/24 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
Vue中props的使用详解
2018/06/15 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
python实现拼接图片
2020/03/23 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
人资专员岗位职责
2014/04/04 职场文书
父母对孩子说的话
2014/04/12 职场文书
课外活动总结范文
2014/07/09 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
初级职称评定工作总结
2015/08/13 职场文书