rpc也叫远程过程调用,允许一台服务器调用远程的另一台服务器中的代码,并获取返回值。grpc是一款与语言,平台无关的rpc,默认基于protobuf序列化与反序列化协议
1、体积小
2、速度快
3、跨平台多语言
4、兼容性好
因为protobuf的序列化和反序列化过程很复杂,所以我们需要一个中间工具帮我们自动生成代码。
如果能自己手写,也可以不下👻
https://github.com/protocolbuffers/protobuf/releases
ps:如果是32位系统或者是linux系统就选择上面哪些
下载完毕后,解压,配置环境变量,即可
上面那个只是通用编译器,需要搭配go语言的特定编译器功能才完整
go get github.com/golang/protobuf/protoc-gen-go
直接在终端安装即可,不需要配置环境变量,因为它已经下载到gopath里面了
protofile/helloworld.proto
在终端下执行
protoc --go_out=./ helloworld.proto
这里解释下为什么helloworld.proto中已经指定了输出文件夹还要指定go_out,这两个参数其实是一起工作的,最终的生成路径就是go_out+go_package拼接的结果
看到这样子一个文件,就说明成功了
这个最好不要把生成的代码放到proto文件夹下面,这样子proto和刚刚go get下来的那个包名冲突了,所以最好改一下(后面我改成proto_obj了)
测试代码比较简单,就不多说了
required:表示该字段不能为空(proto3已经取消了,变成默认值了)
optional:表示该字段可以为空
repeated:相当于数组
相当于定义接口,后面会用到
protoc --go_out=plugins=grpc:./ .\product.proto
这里生成了.pb.go文件后需要按照上面的项目结构分别复制到客户端和服务端
分别运行服务端、客户端,发现客户端能正常输出服务端返回的数据,说明成功了