• 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 为服务端返回的数字,至此客户端访问到了服务端
  • 相关阅读:
    数据结构与算法简记--拓扑排序
    数据结构与算法简记--redis有序集合数据结构-跳表
    数据结构与算法简记--动态规划实战
    数据结构与算法简记--动态规划理论
    数据结构与算法简记--动态规划初识
    数据结构与算法简记--回溯算法
    数据结构与算法简记--分治算法
    数据结构与算法简记--贪心算法
    数据结构与算法简记--搜索算法
    数据结构与算法简记--图
  • 原文地址:https://www.cnblogs.com/brady-wang/p/14445014.html
Copyright © 2020-2023  润新知