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) intSize 返回 m 的有线格式编码的大小(以字节为单位)。
此外,在您的情况下,考虑设置grpc.MaxCallRecvMsgSize为grpc.CallOption管理限制可能会很有用。
我想出了一个方法来做到这一点。解决方案是将 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)