gRPC
上篇博客我们学习了 Proto3 协议,今天我们来学习 gRPC 框架,这两个一般都会放在一起使用,那我们开始吧
gRPC 简介
gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。它的特点:
[1]HTTP/2;
[2]protobuf;
[3]客户端和服务端基于同一份 IDL(接口定义语言);
[4]移动网络的良好支持;
[5]多语言;
gRPC 服务启动
首先编写一个服务端代码,然后运行起来。主程序代码如下:
package main import ( "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/reflection" pb "greeter/proto" "log" "net" ) type GreetServiceServer struct { } func (s *GreetServiceServer) SayHello(ctx context.Context, in *pb.SayHelloReq) (*pb.SayHelloRsp, error) { log.Println("SayHi begin...") resp := "Hello: " + in.Name return &pb.SayHelloRsp{Response: resp}, nil } func main() { lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", "127.0.0.1", 8888)) if err != nil { log.Fatalf("dail failed: %v", err) return } grpcServer := grpc.NewServer() // 注册 grpcurl 的 reflection 服务 reflection.Register(grpcServer) pb.RegisterGreetServiceServer(grpcServer, &GreetServiceServer{}) log.Println("gRPC server is running...") grpcServer.Serve(lis) }
开启 gRPC 服务的步骤:
[1] 监听指定 TCP 端口,用于接收客户端请求
[2] 创建 gRPC Server 的实例对象
[3] gRPC Server 内部服务和路由的注册
[4] Server() 调用服务器以执行阻塞等待,直到进程被终止或被 Stop() 调用
grpcurl 命令
安装
$ go get github.com/fullstorydev/grpcurl $ go install github.com/fullstorydev/grpcurl/cmd/grpcurl
注册 reflection 服务
grpcurl 对于其它 grpc 服务的感知皆来自 reflection 服务,所以在注册自己的服务之前需要先注册 reflection 服务,否则会提示:
grpcurl 的使用
查询服务列表
查询服务提供的方法
查看更详细的描述
获取参数详细信息
调用服务方法
注:上述命令是在 windows 系统上所使用的格式,如果是在类 Linux 系统上,则只需要:
$ grpcurl -d '{"Name":"sween"}' --plaintext localhost:8888 greeter.greetService.SayHello
所有博文均为原著,如若转载,请注明出处!