如何测量 gRPC 响应的大小

Ash*_*rva 5 rpc go grpc grpc-python grpc-go

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

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

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

我已经阅读了有关该主题的多篇文章,但什么也没找到?有人可以帮忙吗?谢谢。

我的实现是使用golang

小智 6

计算消息大小

根据原型文档

func Size(m Message) int

Size 返回 m 的有线格式编码的大小(以字节为单位)。

gRPC 消息大小限制

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


Ash*_*rva 3

我想出了一个方法来做到这一点。解决方案是将 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
}
Run Code Online (Sandbox Code Playgroud)