首页 > 解决方案 > 不可用:保活失败。连接可能已经消失

问题描述

我在 Android 应用程序上使用 grpc-okhttp 对后端进行 RPC 调用。

这是客户端保持活动配置:

.keepAliveTime(2, TimeUnit.SECONDS)
.keepAliveTimeout(5, TimeUnit.SECONDS)
.keepAliveWithoutCalls(true)

我观察到连接在某些时候断开但直到应用程序重新启动才恢复的情况。

我还没有找到一种方法来始终如一地重现它,但在生产中我看到很多错误“不可用:Keepalive 失败。连接可能已经消失”。

根据我的理解,gRPC 应该自动重新连接,但看起来一旦保持活动失败一次,它甚至都不会费心重新连接 - 后续请求会立即失败,甚至不需要等待截止日期或保持活动超时。

标签: androidgrpcgrpc-java

解决方案


这可能是由于在 Android 设备上发现网络状态更改的延迟/失败造成的。gRPC 提供了AndroidChannelBuilder,它正在尝试专门解决这个问题。它使用 Android ConnectivityManager来接收网络状态更新,并且可以更快地响应网络变化。


推荐阅读