golang-GRPC框架的四项服务

在gRPC中,客户端应用程序可以直接调用另一台不同机器上的服务器应用程序的方法,就像调用本地对象一样,这使您更容易创建分布式应用程序和服务。与许多RPC系统类似,gRPC基于定义服务和指定可以远程调用的方法(包括参数和返回类型)的概念。在服务器上实现这个接口,并运行一个gRPC服务器来处理客户端调用。在客户机上有一个存根可以和在服务器上一样。

gRPC客户端和服务器可以在各种环境中运行和交互——从google内部的服务器到您自己的笔记本,并且可以用gRPC支持的任何语言编写。因此,你可以很容易地用Java创建gRPC服务器,用Go、Python和Ruby创建客户端。此外,谷歌的最新API将拥有gRPC版本的接口,让您可以轻松地将谷歌的功能集成到您的应用程序中。

gRPC默认使用协议缓冲区,这是Google开放的成熟的结构化数据序列化机制(当然也可以使用JSON等其他数据格式)。Proto3是一种新型的协议缓冲区,它具有轻量级和简化的语法,一些有用的新功能,并支持更多的新语言。目前已经针对Java和C++发布了beta版,针对JavaNano (Android Java)发布了alpha版,协议缓冲区Github的源码库中支持Ruby,golang/protobuf Github的源码库中有针对Go语言的生成器。对更多语言的支持正在开发中。

有了gRPC,我们可以一次在一个. proto文件中定义服务,并用任何支持它的语言实现客户机和服务器。相反,它们可以在各种环境中使用,从谷歌的服务器到你自己的平板电脑——GRPC帮助你解决不同语言和环境之间通信的复杂性。使用协议缓冲区还可以获得其他好处,包括高效的序列号、简单的IDL和容易的接口更新。

现在让我们仔细看看当gRPC客户机调用gRPC服务器的方法时发生了什么。我们不讨论实现细节。您可以在我们的特定语言页面中找到更多关于实施细节的详细内容。

首先,让我们看一下最简单的RPC形式:客户机发送一个请求,得到一个响应。

服务器端流式RPC与我们的简单示例相同,只是它在获得客户端请求信息后发送回一个回复流。在发送完所有回复后,服务器的状态细节(状态码和可选的状态信息)和可选的跟踪元数据被发送回客户端,从而完成服务器的工作。客户端在收到所有服务器的响应后也完成了工作。

客户端流RPC基本上与我们的简单示例相同,只是客户端向服务器发送一个请求流,而不是原始的单个请求。在收到来自客户端的所有请求后,服务器通常(但不一定)会发回一个包含其状态细节和可选跟踪数据的回复。

双向流RPC,调用由调用方法的客户端初始化,服务器接收客户端的元数据、方法名和截止时间。服务器可以选择发送回它的初始元数据,或者等待客户端发送请求。接下来怎么开发取决于应用,因为客户端和服务器可以任意顺序读写——这些流的操作是完全独立的。比如服务器可以等到收到所有客户端的消息后再写回复,或者服务器和客户端可以像“乒乓”一样:服务器得到请求后发回回复,然后客户端根据回复再发送一个请求,以此类推。

通过运行以下命令克隆并安装grpc-go代码库:

下载protobuf源码包

安装golang-protobuf

第一步是使用协议缓冲区来定义gRPC服务和方法请求和响应的类型。

若要定义服务,必须在。原型文件:

然后在服务中定义rpc方法,并指定请求和响应类型。gRPC允许定义四种类型的服务方法。

服务。原型文件如下: