使用 gRPC

在过去的十年中,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,可输入以下命令。

bash 复制代码
[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,则可以输入以下命令设置路径,以便插件可以找到代码文件。

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

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

下载文件后,打开压缩文件夹,将 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 文件夹中。代码如下所示:

Go 复制代码
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
相关推荐
神仙别闹4 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE6 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
zwjapple22 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five23 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
前端每日三省25 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
凡人的AI工具箱38 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
chnming19871 小时前
STL关联式容器之map
开发语言·c++
进击的六角龙1 小时前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂1 小时前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc1 小时前
Python简介以及解释器安装(保姆级教学)
开发语言·python