grpc客户端 服务端测试

grpc客户端 服务端测试

服务端创建

  1. 创建服务端目录结构

    pbfiles

    ​ Prod_proto

    services

    ​ ProdService.go

    server.go

  2. 生成pb文件

    • 进入pbfiles目录

    • Prod.proto文件写入

      syntax = "proto3";
      
      option go_package = ".;services";
      
      message ProdRequest{
        int32 prod__id = 1;
      }
      
      message ProdResponse{
        int32 prod_stock = 1;
      }
      
      service ProdService{
        rpc GetProdStock(ProdRequest) returns (ProdResponse);
      }
      
      
      
    • protoc --go_out=plugins=grpc:../services Prod.proto

    • go mod tidy

  3. 新建ProdService服务

    • 在service目录新建ProdService.go

      package services
      
      import (
      	"golang.org/x/net/context"
      )
      
      type ProdService struct {
      
      }
      
      func (s *ProdService) GetProdStock(ctx context.Context, req *ProdRequest) (*ProdResponse, error) {
      	return &ProdResponse{
      		ProdStock:     60,
      	},nil
      }
      
      
  4. 最外层建立server.go

    • package main
      
      import (
      	"google.golang.org/grpc"
      	"net"
      	"test1/services"
      )
      
      func main() {
      	rpcServer := grpc.NewServer() // 创建rpcServer
      	services.RegisterProdServiceServer(rpcServer, new(services.ProdService))
      	listen,_ := net.Listen("tcp",":8081")
      	_ = rpcServer.Serve(listen)
      
      }
      
      
  5. 启动服务

    • go run server.go
    • 此时已有rpc服务监听这8081端口

客户端建立

  1. 新建个项目 目录目录结构

    ​ main.go

    ​ services

    ​ --Prod.pb.go // 从服务端复制过来的

    1. main.go
    package main
    
    import (
    	"client/services"
    	"context"
    	"fmt"
    	"google.golang.org/grpc"
    	"log"
    )
    
    
    
    func main() {
    	conn,err := grpc.Dial(":8081",grpc.WithInsecure())
    	if err != nil {
    		log.Fatalln(err)
    	}
    	defer conn.Close()
    
    	prodClient := services.NewProdServiceClient(conn)
    	prodResponse,err := prodClient.GetProdStock(context.Background(),&services.ProdRequest{
    		Prod_Id: 12,
    	})
    
    	if err != nil{
    		log.Fatalln(err)
    	}
    
    	fmt.Println(prodResponse)
    
    }
    
    
    1. 运行
    • go run main.go
    • 结果: prod_stock:60 为服务端返回的数字,至此客户端访问到了服务端
原文地址:https://www.cnblogs.com/brady-wang/p/14445014.html