gRPC 如何知道客户端是否受到限制

gRPC How to know if a client is getting throttled

在 gRPC go 中,我如何知道客户端是否受到服务器的限制。 有没有我可以听的事件来观察这个?

就我而言,我使用的是简单的一元。

我使用了 tcpdump 并检查了 window 更新事件的频率,但我想可能有更好的方法。

Channelz 可能有您想要的:https://github.com/grpc/proposal/blob/master/A14-channelz.md#socket-data

您需要制作服务器:https://pkg.go.dev/google.golang.org/grpc@v1.44.0/channelz/service#RegisterChannelzServiceToServer, and use a grpc client to read the data (e.g. https://github.com/grpc-ecosystem/grpcdebug)

如果我没记错的话,它不会在流量控制 window 耗尽时发送信号。但出于调试目的,它会打印 window 大小。


请注意 window 更新事件的频率并不表示客户端是否在流量控制上被阻止。 Window更新是定期交换以跟踪流量控制window。