本页向您介绍gRPC和协议缓冲区。gRPC可以使用协议缓冲区作为其接口定义语言(IDL)和底层消息交换格式。如果你是gRPC和/或协议缓冲区的新手,请阅读这个! 如果你只是想先深入了解gRPC的操作,请选择一种语言并尝试其快速启动。
在gRPC中,客户端应用程序可以直接调用不同机器上的服务器应用程序的方法,就像它是一个本地对象一样,使你更容易创建分布式应用程序和服务。就像许多RPC系统一样,gRPC是围绕着定义一个服务的想法,指定可以远程调用的方法及其参数和返回类型。在服务器端,服务器实现这个接口并运行gRPC服务器来处理客户端的调用。在客户端,客户端有一个存根(在某些语言中被称为只是一个客户端),提供与服务器相同的方法。
gRPC客户端和服务器可以在各种环境中运行并相互交谈--从Google内部的服务器到你自己的桌面--并且可以用任何gRPC支持的语言编写。因此,举例来说,你可以很容易地用Java创建一个gRPC服务器,客户端用Go、Python或Ruby。此外,最新的谷歌API将有gRPC版本的接口,让你轻松地在你的应用程序中建立谷歌功能。
使用协议缓冲区
默认情况下,gRPC使用谷歌成熟的开源机制Protocol Buffers来序列化结构化数据(尽管它也可以用于其他数据格式,如JSON)。这里有一个关于它如何工作的快速介绍。如果你已经熟悉了协议缓冲区,请随意跳到下一节。
使用协议缓冲区的第一步是为你想在proto文件中序列化的数据定义结构:这是一个普通的文本文件,扩展名为.proto。协议缓冲区数据的结构是消息,每个消息是一个小的逻辑信息记录,包含一系列称为字段的名-值对。下面是一个简单的例子。
message Person { string name = 1; int32 id = 2; bool has_ponycopter = 3; }
然后,一旦你指定了你的数据结构,你就可以使用协议缓冲区编译器protoc从你的proto定义中用你喜欢的语言生成数据访问类。这些类为每个字段提供简单的访问器,如name()和set_name(),以及将整个结构序列化/解析为原始字节的方法。因此,例如,如果你选择的语言是C++,在上面的例子中运行编译器将生成一个叫做Person的类。然后你可以在你的应用程序中使用这个类来填充、序列化和检索Person协议缓冲区的信息。
你在普通的proto文件中定义gRPC服务,将RPC方法参数和返回类型指定为协议缓冲区消息。
gRPC使用protoc和一个特殊的gRPC插件,从你的proto文件中生成代码:你会得到生成的gRPC客户端和服务器代码,以及用于填充、序列化和检索你的消息类型的常规协议缓冲器代码。你会看到下面的一个例子。
要了解更多关于协议缓冲区的信息,包括如何在你选择的语言中安装带有gRPC插件的protoc,请参阅协议缓冲区文档。
协议缓冲区版本
虽然协议缓冲器已经向开源用户提供了一段时间,但本网站的大多数例子都使用了协议缓冲器第3版(proto3),它的语法稍微简化,有一些有用的新功能,并支持更多的语言。Proto3目前有Java、C++、Dart、Python、Objective-C、C#、一个ite-runtime(Android Java)、Ruby和JavaScript版本,来自protocol buffers GitHub repo,以及来自golang/protobuf官方软件包的Go语言生成器,还有更多语言正在开发中。你可以在proto3语言指南和每种语言的参考文档中找到更多信息。参考文档还包括一个.proto文件格式的正式规范。
一般来说,虽然你可以使用proto2(目前默认的协议缓冲区版本),但我们建议你使用proto3与gRPC,因为它可以让你使用全部的gRPC支持的语言,以及避免proto2客户端与proto3服务器对话的兼容性问题,反之亦然。
标签:协议,语言,grpc,介绍,gRPC,缓冲区,服务器,客户端 From: https://www.cnblogs.com/ben-zhou/p/16742054.html