简介
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;
导入
bashimport "Demo.proto";
枚举 enum
枚举必须0开始
bashenum SEASON{ SPRING = 0; SUMMER = 1; AUTUMN = 2; WINTER = 3; }
消息 message
bashmessage Resp{ //成员变量类型 成员变量名字 序列化顺序(不能重复,范围1-2^29-1) string msg = 1; int32 code = 2; }
repeatedly
bashmessage Resp{ // 多个数据,相当于Java中的List repeated string list= 1; }
多个消息
bashmessage Resp{ //成员变量类型 成员变量名字 序列化顺序(不能重复,唯一即可,范围1-2^29-1) string msg = 1; int32 code = 2; } message Resp{ // 多个数据,相当于Java中的List repeated string list= 1; }
嵌套消息
bashmessage 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; } }