使用 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,可输入以下命令。

[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

Python使用gRPC是一种方便的方式来构建分布式系统和微服务。gRPC是一个高性能、开源的远程过程调用(RPC)框架,它使用Protocol Buffers作为接口定义语言(IDL)来定义服务接口和消息格式。 要在Python中使用gRPC,首先需要安装gRPC库。可以使用pip命令进行安装: ``` pip install grpcio ``` 安装完成后,可以开始编写gRPC服务和客户端代码。首先需要定义服务接口和消息格式,这可以通过编写.proto文件来完成。然后使用gRPC提供的工具将.proto文件编译成Python代码。 接下来,可以编写服务端代码。在服务端代码中,需要实现.proto文件中定义的服务接口,并提供相应的方法来处理客户端请求。 最后,可以编写客户端代码来调用服务端提供的方法。客户端代码需要创建一个gRPC通道,并使用通道创建一个stub对象,然后可以通过stub对象调用服务端提供的方法。 下面是一个简单的示例代码,演示了如何在Python中使用gRPC: ```python # 导入所需的模块 import grpc import helloworld_pb2 import helloworld_pb2_grpc # 创建一个gRPC通道 channel = grpc.insecure_channel('localhost:50051') # 创建一个stub对象 stub = helloworld_pb2_grpc.GreeterStub(channel) # 调用服务端提供的方法 response = stub.SayHello(helloworld_pb2.HelloRequest(name='Alice')) # 打印服务端返回的结果 print(response.message) ``` 以上代码中,假设服务端提供了一个名为`SayHello`的方法,客户端通过创建一个stub对象来调用该方法,并传递一个`HelloRequest`对象作为参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mindfulness code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值