gRPC对proto文件编写及文件介绍

gRPC—proto文件编写

// 说明我们使用的时proto3语法
syntax = "proto3";

option go_package = ".;service";

// 类似于方法
service SayHello{
    rpc SayHello(HelloRequests) returns(HelloResponse){}
}

// 类似于结构体
message HelloRequests{
    string requestName = 1;
}
message HelloResponse{
    string responseName = 1;
}

在编写完上面的内容后,在/proto目录下执行如下命令:

protoc --go_out=. /hello.proto
protoc --go-grpc_out=. hello.proto

运行完代码后会在proto目录下生成两个.go文件:

hello_grpc.pb.go
hello.pb.go

gRPC—proto文件介绍

message

message关键词类似于结构体,在消息中承载的数据分别对应于每一个字段,其中每一个字段都有一个名字和一种类型

一个proto文件中可以定义多个消息类型

字段规则

required:消息体中必填字段。不设置会导致编码异常,在protobuf2中使用,在protobuf3被删去

optional:消息体中可选字段,protobuf3中没有了required,optional等关键字,都默认为optional

repeate :消息体中 可重复字段,重复的值的顺序会被保留在go中重复的会被定义为切片

消息号

在消息体的定义中,每个字段必须要有唯一的标识号,标识号是[1,2^29-1]范围内的一个整数

嵌套消息

message PersonInfo{
    message Person{
        string name = 1;
        int32 height = 2;
        repeated int32 weight = 3;
    }
    repeated Person info = 1
}

服务定义

如果想要将消息类型用在RPC系统中,可以在 .proto文件中定义一个RPC服务接口,protocol buffer 编译器将会根据所选择的不同语言生成服务器接口代码及存根。

service SearchService{
	rpc Search(SearchRequest) returns (SearchResponse)
}

上述表示定义了一个RPC服务,该方法接受SearchRequest返回SearchResponse

你可能感兴趣的:(go,java,开发语言,rpc,golang)