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