gRPC 是由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制,据说是业界序列化速度最快的协议。
而grpc-go是grpc的一种,因为这是远程通信的,所以需要转化成字节序列,再以二进制序列的形式在网络上传送。所以我们在最开始的时候需要编写一个.proto 文件, 让protoc 编译器生成.pb.go方便后面的使用。
hello.proto文件
syntax = "proto3"; //指定语法版本
package helloword; //指定生成后的 hello.pb.go 的包名
//一个 RPC 服务通过参数和返回类型来指定可以远程调用的方法
service Hello {
// rpc 定义可远程调用服务
rpc HelloWorld (HelloRequest) returns (HelloReply) {
}
}
//消息定义的关键字,相当于struct
message HelloRequest {
// [修饰符] 类型 字段名 = 标识符;
//标识符是用来在二进制格式中识别各个字段的,可以简单理解为序列化后的二进制数据中的布局位置顺序
string name = 1;
}
message HelloReply {
string message = 1;
}
在终端键入protoc -I . --go_out=plugins=grpc:. ./hello.proto
关于这行命令:
①-I
:指定对导入文件的搜索路径
②--go_out=
:指定生成文件的路径,这里指定了生成在当前路径
③plugins=grpc
: 用grpc plugin来执行这段protoc command
④./hello.proto
: 指定待编译的 proto文件
可以看到在当前路径会自动生成一个.pb.go
格式的文件
由于生成的hello.pb.go
内容比较多,就不铺上来了,下面开始实现服务端和客户端