• go演示GRPC的用法


    首先,需要确保已经安装了Go编程语言和gRPC库。可以使用以下命令安装gRPC库:

    go get -u google.golang.org/grpc
    
    • 1

    下面是一个基本的gRPC示例,其中包括服务器端和客户端。示例演示了一个简单的计算器服务,客户端可以发送两个数字给服务器,然后服务器返回它们的和。
    首先,我们将定义一个.proto文件来定义gRPC服务和消息格式。创建一个名为calculator.proto的文件,并将以下内容添加到其中:

    syntax = "proto3";
    
    package calculator;
    
    service CalculatorService {
      rpc Add(AddRequest) returns (AddResponse) {}
    }
    
    message AddRequest {
      int32 num1 = 1;
      int32 num2 = 2;
    }
    
    message AddResponse {
      int32 sum = 1;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    接下来,我们使用以下命令生成gRPC代码:

    protoc calculator.proto --go_out=plugins=grpc:.
    
    • 1

    这将生成calculator.pb.go文件,其中包含了gRPC服务和消息的Go定义。

    接下来,我们将创建服务器端代码。创建一个名为server.go的文件,并将以下内容添加到其中:

    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    	"net"
    
    	"google.golang.org/grpc"
    	"calculator"
    )
    
    type server struct{}
    
    func (s *server) Add(ctx context.Context, req *calculator.AddRequest) (*calculator.AddResponse, error) {
    	num1 := req.GetNum1()
    	num2 := req.GetNum2()
    	sum := num1 + num2
    
    	res := &calculator.AddResponse{
    		Sum: sum,
    	}
    
    	return res, nil
    }
    
    func main() {
    	lis, err := net.Listen("tcp", ":50051")
    	if err != nil {
    		log.Fatalf("Failed to listen: %v", err)
    	}
    
    	s := grpc.NewServer()
    	calculator.RegisterCalculatorServiceServer(s, &server{})
    
    	fmt.Println("Server listening on port 50051")
    	if err := s.Serve(lis); err != nil {
    		log.Fatalf("Failed to serve: %v", err)
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    现在,我们将创建客户端代码。创建一个名为client.go的文件,并将以下内容添加到其中:

    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    
    	"google.golang.org/grpc"
    	"calculator"
    )
    
    func main() {
    	conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
    	if err != nil {
    		log.Fatalf("Failed to connect: %v", err)
    	}
    	defer conn.Close()
    
    	c := calculator.NewCalculatorServiceClient(conn)
    
    	req := &calculator.AddRequest{
    		Num1: 5,
    		Num2: 10,
    	}
    
    	res, err := c.Add(context.Background(), req)
    	if err != nil {
    		log.Fatalf("Error while calling Add RPC: %v", err)
    	}
    
    	fmt.Printf("Sum: %v\n", res.GetSum())
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    现在,可以通过运行以下命令来启动服务器:

    go run server.go
    
    • 1

    然后,通过运行以下命令来运行客户端并调用gRPC服务:

    go run client.go
    
    • 1
  • 相关阅读:
    工具及方法 - 在Source Insight中使用代码格式化工具
    Webpack设置代码映射,可调试打包后的代码
    JavaScript 之 Vue3 入门到精通+网络商城案例(一篇文章精通系列)【WebStorm版】
    美国疾控中心:持续减肥,降低32%患癌风险,降低48%癌死亡风险
    MapReduce WordCount程序实践(IDEA版)
    室内渲染的艺术:创造理想空间的视觉魔法!
    Qt使用qBreakpad定位崩溃位置
    2022卡塔尔世界杯来临,体育界最新创意二维码案例大盘点!
    vue3 定义一个空数组
    【Iterator模式】C++设计模式——迭代器
  • 原文地址:https://blog.csdn.net/m0_73728511/article/details/133256033