如何测量 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
来管理限制可能对您的情况很有用。
我正在尝试想出更好的方法来处理 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
来管理限制可能对您的情况很有用。