1 概述: Proto 文件
proto 文件 = gRpc 远程调用协议中 Protobuf 序列化方案的数据结构与调用服务定义文件
- Proto文件(Protocol Buffers,简称 Protobuf)是Google开发的一种数据序列化格式,用于结构化数据的定义和交换
常被用于RPC(远程过程调用)和数据存储场景。以下是对其核心要素的解读:
应用场景
proto 文件的应用场景
- 云端微服务间的 gRpc 远程调用与通信场景
- 物联网领域,端云协议(一般搭配 MQTT 通信协议)
- ...
核心特点
- 高效:二进制编码,体积比JSON小,解析速度快。
- 跨语言:支持多编程语言(Java、Python、Go等)。
- 可扩展:新增字段不影响旧版本解析(向前兼容)。
Proto文件清晰定义了数据结构和服务功能交互接口,是跨系统数据交换的高效方案。
2 Proto 文件的语法解读
版本声明 (syntax)
Proto文件需指定版本,常用的有proto2和proto3(推荐使用proto3,语法更简洁):- syntax = "proto3"; // 声明使用proto3语法
复制代码 包名(Package)
用于避免命名冲突,类似代码中的命名空间:- package example.user; // 定义包名,生成代码时会作为命名空间/包结构
复制代码 导入其他Proto文件(import)
可通过import复用其他文件的定义:- import "common/address.proto"; // 导入外部proto文件
复制代码 消息类型(Message)
- 核心部分,用于定义结构化数据,类似“类”或“结构体”:
- message User {
- // 字段格式:[修饰符] 类型 名称 = 字段编号;
- string name = 1; // 字符串类型,编号1(唯一,用于二进制编码,1-15占1字节)
- int32 age = 2; // 32位整数
- bool is_student = 3;// 布尔值
- Address addr = 4; // 引用其他message类型(如导入的Address)
-
- // 重复字段(类似数组)
- repeated string hobbies = 5; // repeated表示该字段可包含多个值
- }
复制代码
- 字段编号:必须唯一,1-15优先用于频繁出现的字段(编码更高效)。
- 类型:支持基础类型(int32、string、bool等)和自定义message类型。
枚举(Enum)
定义枚举类型,限制字段只能取预设值:- enum Gender {
- GENDER_UNSPECIFIED = 0; // proto3要求枚举第一个值为0(默认值)
- MALE = 1;
- FEMALE = 2;
- }
- // 在message中使用
- message User {
- Gender gender = 6; // 引用枚举类型
- }
复制代码 服务定义(Service)
- service UserService {
- // 定义RPC方法:参数为Request,返回Response
- rpc GetUser(GetUserRequest) returns (UserResponse);
- rpc UpdateUser(UpdateUserRequest) returns (UpdateResponse);
- }
- // 方法参数和返回值的message定义
- message GetUserRequest {
- int32 user_id = 1;
- }
- message UserResponse {
- User user = 1;
- bool success = 2;
- }
复制代码 生成代码
- Proto文件需通过编译器(protoc)生成对应语言的代码(如Java、Python、Go等),生成的代码包含序列化、反序列化及消息操作的方法。
例如,生成Python代码:
- protoc --python_out=./ user.proto
复制代码 X 参考文献
本文作者: 千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
相关推荐
|
|