gRPC-初识Protocol Buffers

简介

gRPC gRPC是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。gRPC 基于 HTTP/2 标准设计,带来双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

特点

协议

基于 HTTP/2 标准设计,带来双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

序列化

gRPC 默认使用 Protocol Buffers 作为 RPC 序列化框架。Protocol Buffers是由Google开发的一种数据序列化协议。序列化内容更小,更快更简洁。而且一次定义,可生成多种语言的代码。

Protocol Buffers

一般使用 proto3 的新风格的 protocol buffers,它拥有轻量简化的语法、一些有用的新功能,并且支持更多新语言。

proto3语法

文件格式

* .proto 为文件后缀名

版本

复制代码
syntax = "proto3";

注释

bash 复制代码
//    单行注释

/*
      多行注释
*/

Java相关

bash 复制代码
// 一个源文件还是多个源文件
option java_multiple_files = true;
// 源文件放置的包名
option java_package = "com.agi.grpc";
// Java外部类名字,[内部类用于开发]
option java_outer_classname = "Demo";

逻辑包

bash 复制代码
// 便于内容管理
package demo;

导入

bash 复制代码
import "Demo.proto";

枚举 enum

枚举必须0开始

bash 复制代码
enum SEASON{
  SPRING = 0;
  SUMMER = 1;
  AUTUMN = 2;
  WINTER = 3;
}

消息 message

bash 复制代码
message Resp{
  //成员变量类型 成员变量名字 序列化顺序(不能重复,范围1-2^29-1)
  string msg = 1;
  int32 code = 2;
}

repeatedly

bash 复制代码
message Resp{
  // 多个数据,相当于Java中的List
  repeated string list= 1;
}

多个消息

bash 复制代码
message Resp{
  //成员变量类型 成员变量名字 序列化顺序(不能重复,唯一即可,范围1-2^29-1)
  string msg = 1;
  int32 code = 2;
}

message Resp{
  // 多个数据,相当于Java中的List
  repeated string list= 1;
}

嵌套消息

bash 复制代码
message Resp{
  message Data{
    int64 id = 1;
    string name = 2;
  }
  //成员变量类型 成员变量名字 序列化顺序(不能重复)
  string msg = 1;
  int32 code = 2;
  // List<Data>
  repeated Data data = 3;
}

oneof

可取值为其中一个

复制代码
message Response{
  oneof test{
    int64 id = 1;
    string name = 2;
  }
}
相关推荐
++==1 天前
RPC:grpc的使用与安装、server和client的使用示例、lsb_relese、自定制协议(LVC)+protobuf的RPC调用框架的实现
网络·网络协议·rpc
码匠许师傅2 天前
【设计模式精讲】21.迭代器模式(Iterator)
c++·设计模式·rpc·迭代器模式·软件工程·uml
天天喝旺仔2 天前
gRPC 流式通信实战:从一元调用到双向流,吃透四种 RPC 模式(Go 版)
分布式·http·微服务·rpc·go
可爱系程序猿5 天前
添加网络打印机提示 0x000006ba:从 RPC 服务、Print Spooler 到主机发现排查
网络·网络协议·rpc
可爱系程序猿7 天前
Windows 11 添加共享打印机提示 0x00000bc4:从 RPC 发现到策略配置排查
windows·网络协议·rpc
Patrick_Wilson10 天前
RPC 与 REST 的本质区别看这一篇就够了:别再只看 URL 里有没有动词
http·rpc·restful
catino10 天前
spring-IOC、DI
java·spring·rpc
头茬韭菜11 天前
功能点 11-12:客户端、RPC 通信、监控与安全
网络协议·安全·rpc·fluss
JackSparrow41412 天前
Kafka(七)集成Apache Avro+Apicurio Schema Registry以保障生产者与消费者的消息兼容性
java·中间件·rpc·kafka·apache·avro·schema-registry
爱学堂IT分享13 天前
码神之路-Netty-从零实现RPC框架+SpringBoot实战项目教程
spring boot·网络协议·rpc