【问题标题】:gRPC Android Client losing connection "too many pings"gRPC Android 客户端失去连接“ping 太多”
【发布时间】:2018-12-20 09:56:58
【问题描述】:

Android grpc 客户端正在接收来自服务器的 GOAWAY,出现“ping 太多”错误。现在我意识到这可能是服务器端的问题,但我认为问题是客户端通道设置与服务器的设置不匹配。

我有一个具有以下设置的 C# gRPC 服务器:

List<ChannelOption> channelOptions = new List<ChannelOption>();
channelOptions.Add(new 
ChannelOption("GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS", 
1000));
channelOptions.Add(new 
ChannelOption("GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA", 0));
channelOptions.Add(new 
ChannelOption("GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS", 1));


this.server = new Server(channelOptions) {
    Services = { TerminalService.BindService(this) },
    Ports = {new ServerPort("0.0.0.0", 5000, 
 ServerCredentials.Insecure)}
};

在 Android 上,我有以下频道设置:

private val channel = ManagedChannelBuilder.forAddress(name, port)
        .usePlaintext()
        .keepAliveTime(10, TimeUnit.SECONDS)
        .keepAliveWithoutCalls(true)
        .build()

几分钟后(但似乎是随机时间)。我得到了goaway错误。我注意到,如果我在通话中流式传输数据,那么错误就永远不会发生。仅当流上没有数据时。这让我相信问题是 GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA 也需要在 Android 客户端上设置。问题是我一生都找不到在 gRPC java 上设置这些通道设置的位置。有人可以指出我可以在哪里设置这些频道设置吗?没有设置这些的示例。

【问题讨论】:

    标签: android grpc keep-alive grpc-java


    【解决方案1】:

    指定的频道选项使用了错误的名称。 GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA 之类的名称是 "grpc.http2.max_pings_without_data" 之类的 C 定义。

    您可以通过查看 grpc_types.h 从 C 名称映射到键字符串。您应该更喜欢使用 ChannelOptions 中可用的 C# 常量之一,但在这种情况下,这似乎不是一个选项。

    这些选项在 Java ManagedChannelBuilder API 中不可见,因为它们是特定于服务器的设置。因此,它们在 ServerBuilder 上可见。有关 Java keepalive API 的参考,请参阅 A8 client-side keepalive

    【讨论】:

    • 感谢您的回答,但我仍然非常坚持这一点。 grpc.keepalive_permit_without_calls grpc.http2_min_recv_ping_interval_without_data_ms 似乎对 C# 服务器没有影响。它总是以 too_many_pings 响应。确实非常令人沮丧。
    • 不是 grpc.http2_min_recv_ping_interval_without_data_ms 而是 grpc.http2.min_ping_interval_without_data_ms 。我已经修复了答案中的 grpc_types.h 链接。
    猜你喜欢
    • 2012-09-28
    • 2017-12-24
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多