zoukankan      html  css  js  c++  java
  • Go gRPC 调试工具

    在开发grpc的时候,Go gRPC 调试工具 可以说是必备工具。

    安装:

    go get github.com/fullstorydev/grpcui   
    go install github.com/fullstorydev/grpcui/cmd/grpcui
    grpcui -help #验证是否安装

    准备grpc项目,如:

    hello.proto 和main.go

    syntax = "proto3";
    option go_package = "./;proto";  
    package protos;
    
    service Greeter {
      rpc SayHello (HelloRequest) returns (HelloReply) ;
    }
     
    message HelloRequest {
      string name = 1;
    }
     
    message HelloReply {
      string message = 1;
    }
    package main
    
    import (
        "context"
        "fmt"
        pb "grpcdemo/protos"
        "net"
    
        "github.com/kataras/iris/v12"
        "github.com/kataras/iris/v12/middleware/logger"
        "github.com/kataras/iris/v12/middleware/recover"
        "google.golang.org/grpc"
        "google.golang.org/grpc/reflection"
    )
    
    func main() {
    
        GPRCServer()
    
        // http
        app := iris.New()
        app.Use(recover.New())
        app.Use(logger.New())
    
        app.Handle("GET", "/", func(ctx iris.Context) {
            ctx.WriteString("pong")
        })
        app.Run(iris.Addr(":8080"))
    }
    
    func GPRCServer() {
        // 监听本地端口
        listener, err := net.Listen("tcp", ":9090")
        if err != nil {
            return
        }
        s := grpc.NewServer()                  // 创建GRPC
        pb.RegisterGreeterServer(s, &server{}) // 在GRPC服务端注册服务
    
        reflection.Register(s)
        fmt.Println("grpc serve 9090")
        err = s.Serve(listener)
        if err != nil {
            fmt.Println(fmt.Sprintf("failed to serve: %v", err))
        }
    
    }
    
    type server struct{}
    
    func NewServer() *server {
        return &server{}
    }
    
    func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
        msg := "Resuest By:" + in.Name + " Response By :" + LocalIp()
        fmt.Println("GRPC Send: ", msg)
        return &pb.HelloReply{Message: msg}, nil
    }
    
    func LocalIp() string {
        addrs, _ := net.InterfaceAddrs()
        var ip string = "localhost"
        for _, address := range addrs {
            if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
                if ipnet.IP.To4() != nil {
                    ip = ipnet.IP.String()
                }
            }
        }
        return ip
    }

    windows技术爱好者
  • 相关阅读:
    HCNP Routing&Switching之BGP路由过滤和ASPathFilter Linux
    HCNP Routing&Switching之组播技术组播基础 Linux
    HCNP Routing&Switching之组播技术组播地址 Linux
    HCNP Routing&Switching之组播技术组播协议IGMP Linux
    HCNP Routing&Switching之BGP团体属性和团体属性过滤器 Linux
    pcanet网络理解
    OpenAPITools 实践
    React MobX 开始
    PDFium 渲染
    PDF.js Electron Viewer
  • 原文地址:https://www.cnblogs.com/majiang/p/14716527.html
Copyright © 2011-2022 走看看