如何测量 gRPC 响应的大小

How To Measure The Size of gRPC Response

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

could not greet: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (74000087 vs. 4194304)

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

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

我的实现是使用 golang

我想出了一个办法来做到这一点。解决方案是将 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
}

正在计算邮件大小

根据 proto docs

func Size(m Message) int

Size returns the size in bytes of the wire-format encoding of m.

gRPC 消息大小限制

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