LinuxC++gPRC使⽤说明
⼀、基础概念
1.RPC
RPC 代指远程过程调⽤(Remote Procedure Call),它的调⽤包含了传输协议和编码(对象序列号)协议等等。允许运⾏于⼀台计算机的程序调⽤另⼀台计算机的⼦程序,⽽开发⼈员⽆需额外地为这个交互作⽤编程。)
1)R PC 框架
⼀个完整的 RPC 框架,应包含负载均衡、服务注册和发现、服务治理等功能,并具有可拓展性便于流量监控系统等接⼊。
常见 RPC 框架:
\跨语⾔多 IDL服务治理注册中⼼服务管理
gRPC√××××
Thrift√××××
Rpcx×√√√√
Dubbo×√√√√
2)R PC优点
简单、通⽤、安全、效率。
3)R PC ⽣命周期
⼀元RPC
⾸先考虑客户端发送单个请求并返回单个响应的最简单的 RPC 类型。
⼀旦客户端调⽤了存根⽅法,服务器就会收到通知:RPC 已经被调⽤,同时包含客户端的元数据 、⽅法名称和指定的截⽌⽇期(如果适⽤)。
然后服务器可以⽴即发送回它⾃⼰的初始元数据(必须在任何响应之前发送),或者等待客户端的请求消息。⾸先发⽣的是特定于应⽤程序的。
⼀旦服务器收到客户端的请求消息,它就会做任何必要的⼯作来创建和填充响应。然后将响应连同状态详细信息(状态代码和可选状态消息)和可选的尾随元数据⼀起返回(如果成功)到客户端。
如果响应状态为OK,则客户端得到响应,在客户端完成调⽤。
服务器流式RPC
服务器流式 RPC 类似于⼀元 RPC,不同之处在于服务器返回消息流以响应客户端的请求。发送完所有消息后,服务器的状态详细信息(状态代码和可选状态消息)和可选的尾随元数据将发送到客户端。这样就完成了服务器端的处理。⼀旦客户端拥有服务器的所有消息,它就完成了。
客户端流式 RPC
客户端流式 RPC 类似于⼀元 RPC,不同之处在于客户端向服务器发送消息流⽽不是单个消息。服务器⽤⼀条消息(连同它的状态详细信息和
可选的尾随元数据)进⾏响应,通常但不⼀定是在它收到所有客户端的消息之后。
双向流式RPC
在双向流式 RPC 中,调⽤由调⽤⽅法的客户端和接收客户端元数据、⽅法名称和截⽌⽇期的服务器发起。服务器可以选择发回其初始元数据或等待客户端开始流式传输消息。
客户端和服务器端流处理是特定于应⽤程序的。由于两个流是独⽴的,客户端和服务器可以按任意顺序读写消息。例如,服务器可以等到收到所有客户端的消息后再写⼊消息,或者服务器和客户端可以玩“乒乓”——服务器收到请求,然后发回响应,然后客户端发送基于响应的另⼀个请求,依此类推。
截⽌⽇期/超时
gRPC 允许客户端指定在 RPC 因DEADLINE_EXCEEDED错误终⽌之前他们愿意等待 RPC 完成多长时间。在服务器端,服务器可以查询特定的 RPC 是否超时,或者还剩下多少时间来完成 RPC。
指定截⽌⽇期或超时是特定于语⾔的:⼀些语⾔ API 根据超时(持续时间)⼯作,⽽某些语⾔ API 根据截⽌⽇期(固定时间点)⼯作,可能有也可能没有默认截⽌⽇期。
RPC 终⽌
在 gRPC 中,客户端和服务器都对调⽤的成功做出独⽴和本地的判断,它们的结论可能不⼀致。这意味着,例如,您可能有⼀个 RPC 在服务器端成功完成(“我已经发送了我所有的响应!”)但在客户端失败(“响应在我的截⽌⽇期之后到达!”)。服务器也有可能在客户端发送所有请求之前决定完成。
golang kotlin取消 RPC
客户端或服务器都可以随时取消 RPC。取消会⽴即终⽌ RPC,以便不再进⾏任何⼯作。
元数据
元数据是有关特定 RPC 调⽤(例如⾝份验证详细信息)的信息,其形式为键值对列表,其中键是字符串,值通常是字符串,但也可以是⼆进制数据。元数据对 gRPC 本⾝是不透明的——它允许客户端提供与服务器调⽤相关的信息,反之亦然。
对元数据的访问取决于语⾔。
频道
gRPC 通道提供到指定主机和端⼝上的 gRPC 服务器的连接。它在创建客户端存根时使⽤。客户端可以指定通道参数来修改 gRPC 的默认⾏为,例如打开或关闭消息压缩。通道具有状态,包括connected和idle。
gRPC 如何处理关闭通道取决于语⾔。某些语⾔还允许查询通道状态。
4)同步与异步
同步RPC调⽤:block until a response arrives from the server are the closest approximation to the abstraction of a
procedure call that RPC aspires to.
异步RPC调⽤:networks are inherently asynchronous and in many scenarios it’s useful to be able to start RPCs without blocking the current thread.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。