Proto3:新版ProtoBuf协议介绍

一、概述

ProtoBuf(Protocol Buffers),是一种广泛使用的轻量级数据交换格式。相比XML和JSON等其他格式,它具有更高的效率、更小的体积和良好的跨平台支持。本文介绍了ProtoBuf的新版本proto3,包括语法、类型、枚举、消息、服务、扩展等方面。

二、语法

Proto3采用了更加简洁、易读的语法,其中最明显的变化是不再强制要求使用”required”、”optional”和”repeated”等关键字。因为在实践中,这些关键字往往会导致API不兼容、代码难以维护。现在只需要在message中定义需要的字段即可:

syntax = "proto3";
message Book {
    int32 id = 1;
    string name = 2;
    int32 pages = 3;
}

同时,还可以在字段名称和序号之间加上”=”,使其更加清晰。在上面的例子中,id、name、pages就是该message的三个字段,它们的类型分别是int32、string和int32。类型的定义将在第三部分进行详细介绍。

三、类型

Proto3中定义了以下几种类型:

1.基本类型

int32、int64、uint32、uint64、sint32、sint64、fixed32、fixed64、sfixed32、sfixed64、float、double、bool、string和bytes。

2.枚举类型

枚举类型是一组有名字的整数常量。示例代码如下:

enum Sex {
    UNKNOWN = 0;
    MALE = 1;
    FEMALE = 2;
}

3.消息类型

消息类型是可嵌套的类型。在一个message中,可以包含多个类型为int、string、enum、message等的字段。示例代码如下:

message Person {
    int32 id = 1;
    string name = 2;
    int32 age = 3;
    Sex sex = 4;
}

四、消息

消息是ProtoBuf传输的基本单位。每个消息都有一个message类型的名称和一些字段。在编写消息时,可以使用默认值、标记为可选或必需、添加文档等。示例代码如下:

message Book {
    int32 id = 1 [default = 0];
    string name = 2;
    repeated string author = 3;
    int32 pages = 4 [deprecated = true];
    string brief = 5 [(google.protobuf.uninterpreted_option).string_value = "这是一本书"];
}

上面的例子中,使用了”=”和”[]”等符号进行更灵活的定义。其中,”=”用于设置默认值,”[]”用于使用标记。另外,还可以使用”(google.protobuf.uninterpreted_option)”进行添加文档等操作。

五、服务

服务定义了一组RPC(Remote Procedure Calls)方法,可以在不同的进程或计算机之间进行调用。服务可以使用message类型定义输入和输出参数,并使用protobuf方法定义服务操作名称、输入参数名称和输出参数名称。示例代码如下:

service Library {
    rpc GetBook(BookRequest) returns (BookResponse) {}
}
message BookRequest {
    int32 id = 1;
}
message BookResponse {
    int32 status = 1;
    Book book = 2;
}

六、扩展

Proto3支持扩展机制,允许在不修改原来定义的情况下,添加新的字段。扩展点必须以extend关键字开始,然后是原始的message类型名称,然后是新字段名称、字段类型和字段标记。示例代码如下:

syntax = "proto3";
message Book {
    int32 id = 1;
    string name = 2;
    int32 pages = 3;
    extensions 100 to 199;
}
extend Book {
    int32 size = 101;
}

七、总结

Proto3是ProtoBuf的新版本,在语法、类型、枚举、消息、服务、扩展等方面进行了多项改进和优化。它更加简洁、易读、易于扩展,是一种更加高效的数据交换格式。我们可以根据实际需求,灵活选择合适的数据交换格式。

原创文章,作者:GLTQL,如若转载,请注明出处:https://www.506064.com/n/370585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
GLTQL的头像GLTQL
上一篇 2025-04-22 01:14
下一篇 2025-04-22 01:14

相关推荐

  • 机智云gagent属于哪个协议?

    机智云gagent主要是基于MQTT协议,同时支持TCP、TLS、WebSocket等多种协议。 一、MQTT协议介绍 MQTT全称Message Queuing Telemetr…

    编程 2025-04-29
  • 使用Netzob进行网络协议分析

    Netzob是一款开源的网络协议分析工具。它提供了一套完整的协议分析框架,可以支持多种数据格式的解析和可视化,方便用户对协议数据进行分析和定制。本文将从多个方面对Netzob进行详…

    编程 2025-04-29
  • 如何取消火车票自动抢票协议

    火车票自动抢票协议,是一种利用技术手段在系统繁忙的情况下,自动刷取并抢购火车票的行为。虽然在某些情况下能够提高购票成功率,但是也会影响其他乘客的购票权益。因此,取消火车票自动抢票协…

    编程 2025-04-29
  • USB协议栈

    USB(Universal Serial Bus)是一种常见的计算机外部接口,它已经被广泛使用在各种设备中,例如打印机、键盘、鼠标等。在实现USB通信的过程中,USB协议栈起着非常…

    编程 2025-04-27
  • DR & BDR:OSPF协议中的两个重要角色

    一、什么是DR & BDR? 在OSPF协议中,DR(Designated Router)和BDR(Backup Designated Router)是两个非常重要的角色。…

    编程 2025-04-25
  • Protobuf使用详解

    一、Protobuf简介 Protocol Buffers,简称 Protobuf,是 Google 于 2008 年发布的一种高效数据存储和交换格式。 其相比于 XML 和 JS…

    编程 2025-04-25
  • YModem协议在上位机中的应用

    一、YModem协议概述 YModem协议是一种常用于串口通信中的文件传输协议。它支持数据校验和数据重传功能,使得数据传输更加稳定可靠。YModem协议有多种不同的实现方式,其中最…

    编程 2025-04-25
  • 网络层协议

    一、IP协议 Internet协议(IP)是网络层中最为基础的协议,它把数据包发送到网络上的其他主机。IP包含两种协议:IPv4和IPv6。 IPv4协议使用32位的地址来唯一地标…

    编程 2025-04-24
  • RIP协议在哪一层

    一、RIP协议简介 RIP(Routing Information Protocol)是一种常见的动态路由协议,也是第一个广泛使用的动态路由协议。它使用UDP协议,常用于小型网络,…

    编程 2025-04-23
  • 深入探究SSH协议

    一、SSH协议的概述 Secure Shell(SSH)是一种加密网络协议,用于在网络上安全地传输数据。它最初是为取代Telnet和不安全的远程Shell协议(例如rlogin)而…

    编程 2025-04-23

发表回复

登录后才能评论