gpt4 book ai didi

android - gRPC Android 客户端失去连接 "too many pings"

转载 作者:行者123 更新时间:2023-12-05 05:13:13 25 4
gpt4 key购买 nike

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

我有一个具有以下设置的 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 上,我有以下 channel 设置:

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

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

最佳答案

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

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

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

关于android - gRPC Android 客户端失去连接 "too many pings",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53866254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com