初步了解GRPC(一)

什么是RPC?

RPC是Remote Procedure Call的简称,翻译成中文就是远程过程调用。
区别于LPC,Local Procedure Call本地过程调用。RPC就是提供跨进程访问的一种机制。
我们知道不同进程之间是不能直接访问的,需要通过跨进程访问的方式进行互相调用。
安卓跨进程的方式有:Binder、ContentProvide、Handler、GRPC
跨进程调用的过程如下图:
跨进程调用
详细了解RPC可以参阅 如何给老婆解释什么是RPC,文章通俗易懂,浅显有趣。

什么是GRPC?

可以阅读官方文档Introduction to gRPC
GRPC使用protocol buffers作为其接口声明语言(IDL),作为其底层通信交换格式,类似于android中的(AIDL)Android Interface Definition Language。
使用GRPC,可以在不同设备上,client端直接调用server端的方法,就像调用本地方法那样,使创建分布式的应用和服务变得更简单。和很多RPC系统一样,GRPC基于围绕定义服务的思想,指定方法的参数和返回值以便能被远程调用。在server端,server实现这个接口并且运行GPRC服务用来处理client端的调用。在client端,client持有一个stub,其提供和server端一样的方法。
GRPC的client和server可以运行和交互在不同的环境-从google内部服务器到你的桌面,可以编写任何GPRC支持的语言。因此,比如你可以用java编写GRPC的server端,用go、python、Ruby编写GRPC的client端。此外,最新的 Google API 将具有其接口的 gRPC 版本,让您可以轻松地将 Google 功能构建到您的应用程序中。

以上是官方对GRPC的介绍。我认为,GPRC是一种跨进程通信的机制,以protocol buffers作为通信语言格式(好比json常用做http通信的语言格式),提供跨进程的通信方式,并提供了不通语言的通信。

使用protocol buffers?

默认GRPC使用protocol buffers ,它是Google用于序列化结构化数据的成熟开源机制。如果你熟悉protocol buffers,请自由浏览下一章。
使用protocol buffers的第一步是定义用于序列化的数据结构在proto文件中。这是一个原始为text文本格式的以.proto扩展名结尾。
protocol buffers的数据结构是message,其中每条消息都是一个小的信息逻辑记录,包含一系列称为字段的名称-值对,下面有一个简单的例子:

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

然后,一旦你制定了你的数据结构,你使用protocol buffers 编译命令protoc生成数据访问类在你首选的语言来自你proto的声明。这些为每个字段提供简单的访问器,向name()和set_name(),以及将整个结构序列化/解析为原始字节的方法。因此,例如,如果您选择的语言是 C++,则在上面的示例中运行编译器将生成一个名为 Person 的类。然后,您可以在应用程序中使用此类来填充、序列化和检索 Person 协议缓冲区消息。
您在普通的 proto 文件中定义 gRPC 服务,将 RPC 方法参数和返回类型指定为协议缓冲区消息:

// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

gRPC 使用 protoc 和一个特殊的 gRPC 插件从你的 proto 文件生成代码:你得到生成的 gRPC 客户端和服务器代码,以及用于填充、序列化和检索你的消息类型的常规协议缓冲区代码。要了解有关协议缓冲区的更多信息,包括如何使用所选语言的 gRPC 插件安装协议,请参阅协议缓冲区文档

protocol buffer versions?

虽然开源用户已经可以使用 Protocol Buffers 一段时间了,但该站点的大多数示例使用的是 Protocol Buffers 版本 3 (proto3),它具有稍微简化的语法、一些有用的新功能并支持更多语言。 Proto3 目前在 Java、C++、Dart、Python、Objective-C、C#、精简运行时(Android Java)、Ruby 和来自协议缓冲区 GitHub 存储库的 JavaScript 以及来自 golang 的 Go 语言生成器中可用protobuf 官方包,更多语言开发中。您可以在 proto3 语言指南和每种语言的参考文档中找到更多信息。参考文档还包括 .proto 文件格式的正式规范
一般来说,虽然您可以使用 proto2(当前默认的协议缓冲区版本),但我们建议您将 proto3 与 gRPC 一起使用,因为它可以让您使用所有 gRPC 支持的语言,并避免与 proto2 客户端通信的兼容性问题proto3 服务器,反之亦然。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值