使用 gRPC

发布于:2024-09-18 ⋅ 阅读:(32) ⋅ 点赞:(0)

        在过去的十年中,REST API 已成为应用程序和系统之间通信的标准选项。然而,2015年,Google 推出了现代开源远程过程调用 gRPC 的概念,它提供了与 REST API 相同的功能,且具有更快、更轻量级和更灵活的服务和通信。因此,现在大多数编程语言都支持 Google Remote Procedure Call(gRPC)。

1. 使用 gRPC

        简单地说,gRPC 是一个现代、开源的远程过程调用(RPC)框架,可以在任何地方运行。RPC 是应用程序中的一种函数,可以通过另一个应用程序远程执行。它在分布式系统中尤其常见,其中一台计算机想要调用分布式系统中另一台机器上的方法或函数。

        gRPC 与 REST API 类似,都是将托管在服务器上的服务暴露给客户端。

gRPC 和 REST 之间存在一些差异。

  • gRPC 使用 HTTP/2,而 REST 使用 HTTP 1.1。这使得 gRPC 能够利用 HTTP/2 的特性,如服务器端和客户端的流式传输。
  • gRPC 使用 Protocol Buffers(Protobuf) 数据格式,而 REST 使用 JSON。
  • 在传统的 REST API 设置中,客户端使用标准的 HTTP 请求(GET、POST、PUT和DELETE) 与服务器通信,而 gRPC 通过 Protobuf 使用一种更抽象的层次来允许更灵活地通信。

        为更详细地说明这些概念,下面将使用 gRPC 实现一个聊天服务。具体来说,将创建一个 gRPC 服务器和客户端,并使用 Protobuf 来创建双方之间的聊天服务。

2. 设置服务

        我们需要额外的服务,这些服务未包含在典型的 Go 安装中。我们需要下载和安装以下应用程序以及创建一个用户目录。 

  • Git
  • gRPC
  • Protobuf
  • protoc
        2.1  Git

        Git 是一个分布式版本控制工具。要在命令行提示符中验证是否已在计算机上安装了 Git,可输入以下命令。

[root@localhost ~]# git --version

        如果系统已经安装了 Git,则此命令将返回当前版本。如果系统尚未安装 Git,可通过 Git 的下载页面 https://git-scm.com/downloads 获取下载和安装说明。 

2.2 gRPC

        我们还需要在系统上安装 gRPC。可以使用以下命令行安装 gRPC 服务。

 [root@localhost ~]# go get -u google.golang.org/grpc

        如果安装成功,当运行此命令时,不会在命令提示符中看到任何内容。

2.3 Protobuf

        Protobuf 是一种由 Google 开发 的开源跨平台机制,用于将结构化数据进行序列化。可以将 Protobuf 视为 XML 的更轻量级和更快版本。与 XML 一样,我们可以决定数据的结构(使用 proto 文件),然后使用 Protobuf 将结构化数据读写到各种流中。通常,Protobuf 被程序用于存储数据与其他应用程序通信。

        可使用以下命令安装 Go 的协议编译器插件(protoc-gen-go)。

[root@localhost ~]# go get github.com/golang/protobuf/protoc-gen-go

        这个 go get 指令将下载并保存文件到计算机上的新目录。如果使用的是 macOS 或 Linux,则可以输入以下命令设置路径,以便插件可以找到代码文件。

[root@localhost ~]# export PATH="$PATH:$(go env GOPATH)/bin"
2.4 protoc

        安装协议缓冲区编译器(protoc),需要使用版本 3 或以下版本。

  • 详细的安装说明可在 Protobuf 的 GitHub 存储库中找到,网址为 https://github.com/protocolbuffers/protobuf。还可以在该页面上找到适用于 macOS 和 Linux 的终端命令。
  • 对于 Windows 用户或者对终端命令有疑问者,可从 Protobuf 存储库的 Releases 文件夹中下载适用于你系统的二进制文件。

        下载文件后,打开压缩文件夹,将 bin 和 include 子目录复制到你的 user/Go 文件夹中。这将向你的 Go 安装中添加 protoc。你将在 Go 中看到一个现有的 bin 子目录;将新版本粘贴到相同的位置。如果需要,可以对这些文件夹进行合并。

2.5 用户目录

        所有程序文件应保存到通过下载文件创建的 usr/Go/src 位置。

  • 在 Linux 或 macOS 上,可能的位置是/usr/local/go/src。
  • 在 Windows 上,位置为 C:\Users\%USERNAME%\Go\src。

请确认此文件夹是否在你的计算机上。另外还要检查 bin  子目录是否包括以下两个文件。

  • protoc.exe
  • protoc-gen-go.exe

3. 创建服务器

                一旦设置好一切,并确认用户目录已创建且包含适当的文件,就可以继续后续工作。在第一步中,将使用 net 包创建一个简单的服务器,该服务器将在端口 10000 上监听 TCP 连接。这是服务器的最基本版本。

        创建一个名为 server.go 的新文件并将其保存到 src 文件夹中。代码如下所示: 

package main

import (
	"fmt"
	"log"
	"net"
)

func main() {
	listener, err := net.Listen("tcp", ":10000")
	fmt.Println(listener)

	if err != nil {
		log.Fatalf("failed to listen: %v", err)
	}
}

 此时代码并没有做太多事情。它使用 net.Listen 函数在本地网络地址上监听。 net.Listen 的第一个输入是网络类型,第二个参数是端口或地址,在本例中为 10000。注意,网络类型必须是以下值之一。

  • tcp
  • tcp4
  • tcp6
  • unix
  • unixpacket


网站公告

今日签到

点亮在社区的每一天
去签到