Android Retrofit 我有时会得到 ECONNRESET,我不知道为什么
Android Retrofit I sometimes get ECONNRESET, and I don't know why
我从后端公司收到 pseudo-randomely ECONNRESET
。我说伪随机是因为我认为它的发生方式与我几乎每次都可以通过发起大量请求来激发它的方式不同。
我通常从 activity 的生命周期事件启动下载,因此我使用 Retrofit
的 Call.enqueue()
在后台联网。在似乎引起麻烦的代码部分,我从后台线程启动了一系列下载(json 的 ~15 个 REST 路由和 5-6 个文件)。在这种情况下,ECONNRESET 在调用的 REST 路由之一上出现 3 次尝试中的 2 次。
服务器端没有更多的解释,我们记录的唯一内容是 read/write ECONNRESET。
这是我试过的方法:
- 更新到 okhttp
3.5.0
(来自 3.2.0
)并改造 2.1.0
(来自 2.0.2
)
- 我在我的请求中添加了 "Connection:close" header 以防止 keep alive。
- 我将我的总池减少到 1:
.connectionPool(new ConnectionPool(0, 1, TimeUnit.SECONDS))
它发生在我的 phone (Android 6) 上,我没有其他 phone 来测试代码。我的 AVD 有一些不相关的问题,导致我无法在不同的 android 版本(即将修复)上进行测试。
你知道什么会引起这种情况吗?
谢谢,
为了记录,我在我的文件下载方法中使用 HttpURLConnection
(而我的 REST api 通过改造和 okhttp 受到质疑),我将其更改为 okHttp
并且它是现在一切都好。
我从后端公司收到 pseudo-randomely ECONNRESET
。我说伪随机是因为我认为它的发生方式与我几乎每次都可以通过发起大量请求来激发它的方式不同。
我通常从 activity 的生命周期事件启动下载,因此我使用 Retrofit
的 Call.enqueue()
在后台联网。在似乎引起麻烦的代码部分,我从后台线程启动了一系列下载(json 的 ~15 个 REST 路由和 5-6 个文件)。在这种情况下,ECONNRESET 在调用的 REST 路由之一上出现 3 次尝试中的 2 次。
服务器端没有更多的解释,我们记录的唯一内容是 read/write ECONNRESET。
这是我试过的方法:
- 更新到 okhttp
3.5.0
(来自3.2.0
)并改造2.1.0
(来自2.0.2
) - 我在我的请求中添加了 "Connection:close" header 以防止 keep alive。
- 我将我的总池减少到 1:
.connectionPool(new ConnectionPool(0, 1, TimeUnit.SECONDS))
它发生在我的 phone (Android 6) 上,我没有其他 phone 来测试代码。我的 AVD 有一些不相关的问题,导致我无法在不同的 android 版本(即将修复)上进行测试。
你知道什么会引起这种情况吗?
谢谢,
为了记录,我在我的文件下载方法中使用 HttpURLConnection
(而我的 REST api 通过改造和 okhttp 受到质疑),我将其更改为 okHttp
并且它是现在一切都好。