在gRPC里,客户端可以像调用本地方法一样直接调用其他机器上的服务端应用程序的方法,帮助你更容易创建分布式应用程序和服务。与许多RPC系统一样,gRPC是基于定义一个服务,指定一个可以远程调用的带有参数和返回类型的的方法。在服务端程序中实现这个接口并且运行gRPC服务处理客户端调用。在客户端,有一个stub提供和服务端相同的方法。
在安装目录下
在你的项目目录下执行以下命令,获取 gRPC 作为项目依赖。
go get google.golang.org/grpc@latest
安装Protocol Buffers v3
装用于生成gRPC服务代码的协议编译器,最简单的方法是从下面的链接:https://github.com/google/protobuf/releases下载适合你平台的预编译好的二进制文件
我们需要将下载得到的可执行文件protoc
所在的 bin 目录加到我们电脑的环境变量中。
安装GO语言插件
go install google.golang.org/protobuf/cmd/protoc-gen-go
安装GRPC插件
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
安装完后执行如下命令,查看是否完成安装
Grpc的开发步聚
1.编写protobuf
用如下命令生成GO文件
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative he
lloworld.proto
生成后的文件如下:
2.编写服务端文件server.go
package main
import (
"OldPacketTest/grpc_test/proto"
"context"
"google.golang.org/grpc"
"net"
)
type Server struct {
proto.UnimplementedGreeterServerServer
}
func (s *Server) SayHello(ctx context.Context, req *proto.HelloRequest) (*proto.HelloReply, error) {
return &proto.HelloReply{
Message: "hello " + req.Name,
}, nil
}
func main() {
g := grpc.NewServer()
proto.RegisterGreeterServerServer(g, &Server{})
lis, err := net.Listen("tcp", "0.0.0.0:8081")
if err != nil {
panic("failed to listen:" + err.Error())
}
err = g.Serve(lis)
if err != nil {
panic("failed to start grpc:" + err.Error())
}
}
客户端代码如下
3.启动服务,先启动服务端,再启动客户端
服务端启动后如下:
启动客户端
这时候就可以看到响应的结果了。这时候一个完整的GRPC服务就完成了