【问题标题】:How To Measure The Size of gRPC Response如何衡量 gRPC 响应的大小
【发布时间】:2020-04-02 09:07:27
【问题描述】:

我正在尝试提出更好的方法来处理 grpc 中的 4mb 消息大小限制。我需要一种方法来测量客户端收到的 grpc 响应的大小。当响应超过 4mb 限制时,grpc 会显示如下错误消息:

无法问候:rpc 错误:代码 = ResourceExhausted desc = grpc:收到的消息大于最大值(74000087 与 4194304)

“74000087”是响应的实际大小。这是如何计算的?有没有办法得到这个值?

我已经阅读了多篇关于这个主题的文章,但一无所获?有人可以帮忙吗?谢谢。

我的实现是使用 golang

【问题讨论】:

    标签: go grpc rpc grpc-python grpc-go


    【解决方案1】:

    我想出了一个办法。解决方法是将gRPC响应编码成byte流,然后使用binary.Size()计算大小

    func GetGRPCResponseSize(val interface{}, desc string) (int, error) {
    
        var buff bytes.Buffer
        enc := gob.NewEncoder(&buff)
        err := enc.Encode(val)
        if err != nil {
            log.Error("encode error:", err)
            return 0, err
        }
        return binary.Size(buff.Bytes()), nil
    }
    

    【讨论】:

      【解决方案2】:

      计算消息大小

      根据proto docs

      func Size(m Message) int

      Size 返回 m 的线格式编码的字节大小。

      gRPC 消息大小限制

      此外,在您的情况下,考虑将 grpc.MaxCallRecvMsgSize 设置为 grpc.CallOption 以管理限制可能会很有用。

      【讨论】:

        猜你喜欢
        • 2021-03-28
        • 1970-01-01
        • 2021-12-01
        • 2022-07-12
        • 2020-12-27
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多