• 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
  • 相关阅读:
    NLP机器翻译全景:从基本原理到技术实战全解析
    React Hooks ——性能优化Hooks
    【数据结构】快排的详细讲解
    ubuntu22.4配置nginx和php
    什么是SpringMVC
    【RF预测】基于matlab随机森林算法数据回归预测【含Matlab源码 2047期】
    ssm+java+vue家乡农产品特产销售商城小程序#毕业设计
    CDGA|从平台自治到规范化的数据治理
    Loopback for Mac:专业级的音频处理能力
    Bean 作用域和生命周期
  • 原文地址:https://blog.csdn.net/m0_73728511/article/details/133256033