当前位置: 首页 > ops >正文

网络协议序列化工具Protobuf

目录

  • 前言
  • 一、下载
    • 注意
  • 二、解压安装
  • 三、Protobuf的使用
    • 1、创建.proto文件
    • 2、利用protoc编译.proto文件

前言

Protocol Buffers是Google的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤于(数据)通信协议、数据存储等。
Protocol Buffers类⽐于XML,是⼀种灵活,⾼效,⾃动化机制的结构数据序列化⽅法,但是⽐XML更⼩、更快、更为简单。
你可以定义数据的结构,然后使⽤特殊⽣成的源代码轻松的在各种数据流中使⽤各种语⾔进⾏编写和读取结构数据。你甚⾄可以更新数据结构,⽽不破坏由旧数据结构编译的已部署程序。

一、下载

下载路径:https://github.com/protocolbuffers/protobuf/releases
如果链接打不开,需要下载 protoc-29.5-win64,可点击这里下载 https://download.csdn.net/download/weixin_45961836/91668744

点击链接打开页面,滑到下面可以看到
在这里插入图片描述

选择对应的版本

如果没有对应的版本,例如win64,可滑动到下面,选择其它版本
在这里插入图片描述

点击打开之后,可以看到有win64,点击下载即可
在这里插入图片描述

注意

在这里插入图片描述
Rc版本:全称release candidate 正式候选版,不建议选。

二、解压安装

解压压缩包,解压出来的文件目录
在这里插入图片描述
复制 bin文件路径 到 环境变量-系统变量Path
例如:D:\protoc-29.5-win64\bin
在这里插入图片描述
Win + R 打开运行窗口,输入

protoc --version

输出结果
在这里插入图片描述
安装成功!!

三、Protobuf的使用

官网文档:https://protobuf.com.cn/overview/

1、创建.proto文件

创建一个.proto文件

syntax = "proto3";
package contacts;message PeopleInfo{string name = 1;int32 age = 2;
}

我们需要在这个PeopleInfo.proto文件中完成一些初始化工作。比如:指定PB语法版本、为当前.proto文件中的数据指定作用域;

关键字 syntax
我们可以利用来指定当前.proto文件锁采用的语法版本

syntax = "proto3";

注意这个语法版本声明需要放在当前.proto文件的首行(注释不算一行),其次就是我们一般都是需要指定当前.proto文件所采用的语法版本为"proto3"的版本,如果不指定的话 .proto文件默认采用 proto2 语法进行编译,proto2语法相对于proto3语法在编程语言支持上没有proto3广,同时对于一些语法的支持也不是很好,为此实际开发中我们通常采用proto3语法来编译当前文件。

关键字 package
我们也可以为当前文件中定义的类声明一个命名空间,来避免不同 .proto之间的命名冲突的问题,这一点我们可以利用关键字来实现:

package contacts;

当然,这个命名空间的定义并不是强制的,但是为了养成良好的编程习惯,我们还是希望能将其定义出来。package 定义的命名空间在经过protoc编译器编译过后会变为C++中的namespace 命名空间,其中包含着在当前.proto文件中定义的各种类;

关键字 message
初始化工作都完成的差不多了,我们就可以开始定义类了,在.proto文件中定义类是利用 message 关键字来完成的

message PeopleInfo{string name = 1;int32 age = 2;
}

在message 定义的类中,我们只需要定义出该类所包含的属性即可,同时我们需要给这些属性进行编号,并且每个同级属性之间不能重复,这是PB语法要求的;
因此在message 中定义的字段格式如下:

message xx{//其中同级属性之间num不能重复type name = num;
}

2、利用protoc编译.proto文件

编译命令:

protoc --csharp_opt=.  xx.proto

在这里插入图片描述
执行成功!

在这里插入图片描述
Test.cs 是编译后的结果,引入项目中使用即可。

Protobuf的使用可参考 https://blog.csdn.net/t5y22/article/details/142169446

http://www.xdnf.cn/news/17694.html

相关文章:

  • 4.1vue3的setup()
  • 2019 GPT2原文 Language Models are Unsupervised Multitask Learners - Reading Notes
  • Kotlin Data Classes 快速上手
  • Qt TCP 客户端对象生命周期与连接断开问题解析
  • 解锁Prompt秘籍:框架、技巧与指标全解析
  • Windows 11操作系统 Git命令执行速度慢
  • SpringMVC基本原理和配置
  • 第2节 如何计算神经网络的参数:AI入门核心逻辑详解
  • pytorch学习笔记-加载现有的网络模型(VGG16)、增加/修改其中的网络层(修改为10分类)
  • 云计算-多服务集群部署实战指南:从JumpServer到Kafka、ZooKeeper 集群部署实操流程
  • 70亿参数让机器人“开窍“:英伟达Cosmos Reason如何让AI理解物理世界
  • 分段锁和限流的间接实现
  • 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
  • Day19 C 语言标准 IO 机制
  • 深度学习——03 神经网络(2)-损失函数
  • 2021 年全国硕士研究生招生考试真题笔记
  • AI时代程序员的进化:从代码工人到创意架构师-优雅草卓伊凡引言:AI浪潮下的职业重构
  • 若依前后端分离版学习笔记(九)——登录和操作日志
  • OpenBMC中的BMCWeb:架构、原理与应用全解析
  • C#面试题及详细答案120道(11-20)-- 面向对象编程(OOP)
  • 初识c语言————排序方法
  • 闹钟时间到震动与声响提醒的实现-库函数版(STC8)
  • springboot接口请求参数校验
  • 力扣121:买卖股票的最佳时机
  • I2c、SPI、USB驱动架构类比
  • 管理变量和事实
  • 【Unity3D】Spine黑线(预乘问题)、贴图边缘裁剪问题
  • @系统管理 - Ansible 补丁管理方案(Windows Linux)
  • 飞算JavaAI的“盾牌”计划:手撕Spring Security + JWT认证链
  • CNN卷积神经网络预测手写数字的Pytorch实现