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 数据加密代码
Dec 24 Python
编写简单的Python程序来判断文本的语种
Apr 07 Python
整理Python中的赋值运算符
May 13 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
Python实现的微信支付方式总结【三种方式】
Apr 13 Python
python中的django是做什么的
Jul 31 Python
Python实现自动签到脚本的示例代码
Aug 19 Python
python进度条显示-tqmd模块的实现示例
Aug 23 Python
Python中快速掌握Data Frame的常用操作
Mar 31 Python
Python的这些库,你知道多少?
Jun 09 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
PHP生成带有雪花背景的验证码
2006/10/09 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
php实现学生管理系统
2020/03/21 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
Laravel 连接(Join)示例
2019/10/16 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
就业自荐书
2013/12/05 职场文书
创业融资计划书
2014/04/25 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
清洁员岗位职责
2015/02/15 职场文书
小学感恩节活动总结
2015/03/24 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers
redis lua限流算法实现示例
2022/07/15 Redis