【问题标题】:How does gRPC client-streaming flow control work in go?gRPC 客户端流式流控在 Go 中是如何工作的?
【发布时间】:2019-12-13 23:12:24
【问题描述】:

我想知道,流控制如何在 Go 中的客户端流式 gRPC 服务中工作。

具体来说,我想知道客户端块中何时调用stream.SendMsg() 函数?根据documentation

SendMsg() 阻塞直到:

  • 有足够的流量控制来调度 m 与传输,或者...

那么流的流控机制的规范是什么?例如,如果负责从流中读取消息的服务器端代码读取消息的速度不够快,那么在什么时候调用 SendMsg() 会阻塞?

服务器是否实现了某种背压机制来告诉客户端它还没有准备好接收更多数据?同时,所有在背压信号之前成功发送的消息,排队在哪里?

【问题讨论】:

    标签: go grpc grpc-go


    【解决方案1】:

    gRPC流控基于http2流控: https://httpwg.org/specs/rfc7540.html#FlowControl

    会有背压。 消息只有在有足够的流控窗口时才会成功发送,否则 SendMsg() 会阻塞。

    接收端的信号不是加背压,是释放背压。这就像说“现在我准备好接收另外 1MB 的消息,发送它们”。

    【讨论】:

    • 您是否应该提供更多关于如何设置gRPC服务器的流量控制窗口的信息?是否可以增加窗口的大小?
    猜你喜欢
    • 2019-04-13
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多