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
原文地址:https://www.cnblogs.com/zpcoding/p/12402189.html