流量控制

解释了什么是流量控制以及如何手动控制它。

流量控制

解释了什么是流量控制以及如何手动控制它。

概述

流量控制是一种机制,用于确保消息接收方不会被发送速度过快的发送方压垮。流量控制可以防止数据丢失,提高性能并增加可靠性。它适用于流式 gRPC 调用 (streaming RPCs),与一元 gRPC 调用 (unary RPCs) 无关。默认情况下,gRPC 会为你处理流量控制的交互,但某些语言允许你覆盖默认行为并进行显式控制。

gRPC 利用底层传输来检测何时可以安全地发送更多数据。当接收方读取数据时,会向发送方返回一个确认,告知发送方接收方有更多容量。

根据需要,gRPC 框架会在从写入调用返回之前等待。在 gRPC 中,当一个值写入到流中时,这并不意味着它已经通过网络发送出去。相反,它只是被传递给了框架,框架现在会处理将其缓冲并发送到操作系统,以便通过网络传输的各种细节。

sequenceDiagram
    participant SA as Sender Application
    participant SG as Sender gRPC Framework
    participant RG as Receiver gRPC Framework
    participant RA as Receiver Application
  
  SA-)+SG: Stream Write
  alt sending too fast
    SG--)SG: Wait
  end
  alt allowed to send
    SG--)-SA: Write call returns
    SG->>RG:Send Msg
  end
  RA->>RG: Request message
  Note right of RA:  Request can be done either<br>after or before message arrives
  RG->>RA: Provide message
  RG->>SG: Send Ack w/ msg size
  opt waiting messages
    SG->>RG: Send Next Msg
  end

语言支持

语言示例
JavaJava 示例
上次修改时间:2023年10月5日:纠正 flow-control.md 中的拼写错误 (#1196) (338a44d)