golang-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允许定义四种类型的服务方法。
服务。原型文件如下: