• 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
  • 相关阅读:
    将十进制的颜色制转换成ARGB
    HTTPS从认识到线上实战全记录
    如何从零开始对接第三方登录(Java版):QQ登录和微博登录
    JS弹出下载对话框以及实现常见文件类型的下载
    【干货】Chrome插件(扩展)开发全攻略
    Lucene5.5.4入门以及基于Lucene实现博客搜索功能
    ReactNative与NativeScript对比报告
    JavaScript常见原生DOM操作API总结
    JS获取剪贴板图片之后的格式选择与压缩问题
    详细记录一下网站备案经过,备案真的很简单
  • 原文地址:https://www.cnblogs.com/zpcoding/p/12402189.html
Copyright © 2020-2023  润新知