grpc介绍
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服务器对话的兼容性问题,反之亦然。