一、gRPC的概念

  gRPC是Google推出的一个开源高性能的轻量级RPC框架,可以在任何环境中运行。它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查和身份验证。它还适用于分布式计算的最后一英里,用于将设备,移动应用程序和浏览器连接到后端服务。

  与许多RPC系统一样,gRPC基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法。它默认使用protocol buffers作为接口定义语言(IDL)来描述服务接口和有效负载消息的结构。

service HelloService {
rpc SayHello (HelloRequest) returns (HelloResponse);
} message HelloRequest {
string greeting = ;
} message HelloResponse {
string reply = ;
}

  gRPC允许定义4种类型的服务方法:

  • 一元RPC,客户端向服务器发送单个请求并返回单个响应,就像正常的函数调用一样。
rpc SayHello(HelloRequest) returns (HelloResponse){
}
  • 服务器流式RPC,客户端向服务器发送请求并获取流以读取消息序列
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse){
}
  • 客户端流式RPC,客户端再次使用提供的流写入一系列消息并将其发送到服务器
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse) {
}
  • 双向流式RPC,双方使用读写流发送一系列消息。
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse){
}

  通过定义.proto文件,gRPC提供protocol buffer compile plugins来生成客户端和服务端的代码。在服务器端,服务器实现服务声明的方法,并运行gRPC服务器来处理客户端调用。 gRPC基础结构解码传入请求,执行服务方法并对服务响应进行编码。而在客户端有一个称为存根的本地对象,它实现与服务端相同的方法,客户端可以在本地上调用这些方法。gRPC支持同步和异步调用。

二、RPC的生命周期

客户端在存根/客户端对象上调用方法后,客户端将元数据,方法名称和指定的截止时间(如果适用)通知到服务端,客户端已调用此RPC。然后,服务器可以立即发送回自己的初始元数据(必须在任何响应之前发送),或者等待客户端的请求消息 。一旦服务端接收到客户端的请求信息就会做出响应,然后将响应与状态详细信息(状态代码和可选状态消息)以及可选的尾随元数据一起返回(如果成功)到客户端。如果状态为OK,则客户端获取响应,从而完成客户端的调用。

最新文章

  1. javascript中对象的深度克隆
  2. WinsockExpert+NC抓包上传之拿WEBSHELL
  3. Farming
  4. WIN7 64位通过VPN远程登录 ASP.Net通过VPN访问Oracle服务器
  5. Socket 学习(一)
  6. put()
  7. PyQt5 api 帮助文档
  8. [Swift]LeetCode466. 统计重复个数 | Count The Repetitions
  9. Python开发【socket篇】解决粘包
  10. 2016-04-25-信息系统实践手记6-JS调用Flex的性能问题一例
  11. HDOJ5540 Secrete Master Plan
  12. 学习tableauhttps://www.tableau.com/zh-cn/learn/training
  13. Android 判定手机是否root
  14. 如何在Linux中使用Firejail运行应用程序
  15. SDI core端口说明
  16. baidu.com直接访问网站,不跳转www.baidu.com
  17. 关于Behold the Kickmen (球员登场)
  18. Oracle VM VirtualBox 无法卸载 更新 和修复
  19. linux -- ubuntuserver 安装图形界面
  20. SpringCloud---声明式服务调用---Spring Cloud Feign

热门文章

  1. java里getPath、 getAbsolutePath、getCanonicalPath的区别
  2. 五十一.Openstack概述 部署安装环境 、 部署Openstack OpenStack操作基础
  3. appium测试android环境搭建(win7)
  4. 【概率论】3-2:连续分布(Continuous Distributions)
  5. [secureCRT] 关闭secureCRT的auto print功能
  6. 设置tomcat实现跨域
  7. CF1214A
  8. Maven的概述和基础(学习整理)
  9. 2018-2019-2 20165210《网络对抗技术》Exp8 Web基础
  10. SOA(面向服务的架构)初识