android - 不可用:保活失败。连接可能已经消失
问题描述
我在 Android 应用程序上使用 grpc-okhttp 对后端进行 RPC 调用。
这是客户端保持活动配置:
.keepAliveTime(2, TimeUnit.SECONDS)
.keepAliveTimeout(5, TimeUnit.SECONDS)
.keepAliveWithoutCalls(true)
我观察到连接在某些时候断开但直到应用程序重新启动才恢复的情况。
我还没有找到一种方法来始终如一地重现它,但在生产中我看到很多错误“不可用:Keepalive 失败。连接可能已经消失”。
根据我的理解,gRPC 应该自动重新连接,但看起来一旦保持活动失败一次,它甚至都不会费心重新连接 - 后续请求会立即失败,甚至不需要等待截止日期或保持活动超时。
解决方案
这可能是由于在 Android 设备上发现网络状态更改的延迟/失败造成的。gRPC 提供了AndroidChannelBuilder
,它正在尝试专门解决这个问题。它使用 Android ConnectivityManager来接收网络状态更新,并且可以更快地响应网络变化。
推荐阅读
- keras - TimeDistributed 层与 ConvLSTM-2D
- c++ - 神经网络精度平台
- xml - XSLT:将某些元素复制为另一个元素的子元素
- prolog - 为什么这个表达不统一
- javascript - jQuery - 使用“for-each”循环更改循环外的变量
- css - 仅对一个变换属性进行动画处理
- java - 如何在 Java 中将变量从一个类传递到另一个类?
- javascript - 如何选择要选择的字符的最少出现次数?
- django - 从 db 表中获取下一个 id 并分配后缀 django 2
- mysql - MYSQL SELECT 到 DELETE 指定了两次