Skip to content

gRPC

gRPC是一个高性能、开源和通用的RPC框架,面向移动和HTTP/2设计。目前提供C、Java和Go语言版本,分别是:grpc,grpc-java,grpc-go.其中C版本支持C,C++, Node.js, Python, Ruby, Objective-C, PHP和C#支持.

底层基于:protobuf协议进行通信

md
# 下载protobuf,并在系统重设置PATH环境变量

https://github.com/protocolbuffers/protobuf/releases

# 安装protoc-gen-go依赖包

go get github.com/golang/protobuf/protoc-gen-go

# 生成proto文件

protoc --go_out=. \*.proto

protoc -I . goods.proto --go_out=plugins=grpc:.

示例proto文件

md
syntax = "proto3"; // 必须为文件首行(非空非注释)

package your_package; // 防止命名冲突,影响生成代码的命名空间

// 可选:为特定语言指定包路径(如 Go);可以指定生成的文件的包路径
option go_package = "example.com/project/protos";

import "google/protobuf/empty.proto"; // 导入其他proto文件

// 用户状态枚举
enum UserStatus {
USER_STATUS_UNSPECIFIED = 0; // 枚举第一个值必须为 0
USER_STATUS_ACTIVE = 1;
USER_STATUS_DISABLED = 2;
}

// 用户信息消息
message User {
int64 id = 1;
string name = 2;
string email = 3;
UserStatus status = 4;
repeated string tags = 5; // repeated 表示一个列表(数组)
optional string nickname = 6; // 可选:可判断“是否被赋值”
}

// 请求消息
message GetUserRequest {
int64 id = 1;
}

// 响应消息
message GetUserResponse {
User user = 1;
}

// 定义服务(常配合 gRPC 使用)
service UserService {
rpc GetUser(GetUserRequest) returns (GetUserResponse);
}

service GoodsService {
rpc GetGoods(google.protobuf.Empty) returns (GoodsResponse);
}