文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

grpc golang安装

2023-05-16 12:38

关注

gRPC (Google Remote Procedure Call) 是一种高性能、跨语言的远程过程调用框架,它通过 Protocol Buffers(ProtoBuf)定义服务接口,并支持众多编程语言。gRPC 在分布式系统的开发中广泛应用,其高效的序列化和反序列化机制、基于 HTTP/2 的流控制和分块传输等一系列特性使其在网络传输方面有着明显的优势。

本文主要介绍在 Golang 中如何安装 gRPC,并编写一个简单的客户端和服务端示例代码。

1. 安装 gRPC

在安装 gRPC 之前,需要先安装 Protocol Buffers 3。Protocol Buffers 是 gRPC 自动生成代码所需的工具,同时也是一个序列化数据的工具。

首先,下载 Protocol Buffers 3 的安装包,以 Mac OS 为例:

$ curl -OL https://github.com/google/protobuf/releases/download/v3.9.1/protobuf-all-3.9.1.zip
$ unzip protobuf-all-3.9.1.zip
$ cd protobuf-3.9.1

执行 configure、make、make install 即可安装 Protocol Buffers:

$ ./configure
$ make
$ sudo make install

安装完 Protocol Buffers 后,使用以下命令安装 Go 的 gRPC 和相关工具:

$ go get -u google.golang.org/grpc
$ go get -u github.com/golang/protobuf/protoc-gen-go

2. 编写 ProtoBuf 文件

ProtoBuf 文件用于定义服务接口和数据结构,并通过 gRPC 工具自动生成相应的代码(包括客户端和服务端代码)。

我们在此编写一个简单的示例,定义一个计算器服务接口,支持加法运算:

syntax = "proto3";

package calculator;

service Calculator {
  rpc Add(AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 left = 1;
  int32 right = 2;
}

message AddResponse {
  int32 sum = 1;
}

在此示例中,定义一个名为 Calculator 的服务接口,包含一个 Add 方法,该方法接收一个 AddRequest 参数并返回一个 AddResponse 参数。

AddRequest 和 AddResponse 都是消息结构,分别包含两个 int32 类型的字段,表示加法的两个操作数和结果。

3. 生成代码

在编写 ProtoBuf 文件后,使用以下命令生成客户端和服务端代码:

$ protoc --go_out=plugins=grpc:. calculator.proto

此命令生成一个名为 calculator.pb.go 的 Go 文件,其中定义了计算器服务的客户端和服务端代码。

4. 编写客户端和服务端代码

在生成客户端和服务端代码后,就可以开始编写实际的客户端和服务端了。

首先是服务端代码,我们创建一个名为 server.go 的文件,实现 Calculator 接口:

package main

import (
    "context"
    "log"
    "net"

    pb "calculator/calculator"

    "google.golang.org/grpc"
)

type server struct{}

func (s *server) Add(ctx context.Context, in *pb.AddRequest) (*pb.AddResponse, error) {
    sum := in.Left + in.Right
    return &pb.AddResponse{Sum: sum}, nil
}

const (
    port = ":50051"
)

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    pb.RegisterCalculatorServer(s, &server{})
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

在此示例中,我们定义了一个名为 server 的结构体,实现了 Calculator 接口中的 Add 方法。Add 方法接收一个 AddRequest 参数,并计算两个操作数之和,返回一个 AddResponse 参数。

最后,通过 gRPC 框架提供的 RegisterCalculatorServer 方法将服务注册到 gRPC 服务器中,并启动 gRPC 服务器。

接下来编写客户端代码,我们创建一个名为 client.go 的文件,实现一个简单的通过计算器服务进行加法运算的例子:

package main

import (
    "context"
    "log"
    "os"
    "strconv"

    pb "calculator/calculator"

    "google.golang.org/grpc"
)

const (
    address     = "localhost:50051"
    defaultName = "world"
)

func main() {
    // Set up a connection to the server.
    conn, err := grpc.Dial(address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    c := pb.NewCalculatorClient(conn)

    // Contact the server and print out its response.
    left, err := strconv.Atoi(os.Args[1])
    if err != nil {
        log.Fatalf("could not parse left operand: %v", err)
    }
    right, err := strconv.Atoi(os.Args[2])
    if err != nil {
        log.Fatalf("could not parse right operand: %v", err)
    }
    r, err := c.Add(context.Background(), &pb.AddRequest{Left: int32(left), Right: int32(right)})
    if err != nil {
        log.Fatalf("could not add: %v", err)
    }
    log.Printf("Sum: %d", r.Sum)
}

在此示例中,我们创建了一个名为 client 的客户端对象,并通过 grpc.Dial 方法连接到服务器。然后,我们从命令行参数中解析出加法的两个操作数,并调用 Add 方法发送请求,得到服务器返回的结果并输出。

5. 运行示例

在两个文件都编写完毕后,使用以下命令编译并运行两个程序:

$ go build server.go
$ go build client.go
$ ./server

然后在另一个终端中执行以下命令运行客户端程序:

$ ./client 1 2

运行结果会输出计算结果 3。

以上就是 gRPC 在 Golang 中的安装和使用,通过 gRPC 编写高效的分布式系统将变得十分简单。

以上就是grpc golang安装的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯