相关疑难解决方法(0)

Android(Java)HttpURLConnection静默重试'读'超时

所以我Google Volley用于HTTP请求,基本上使用Java的是HttpURLConnection.

根据我的测试,问题是:
当达到'读'超时时HttpURLConnection,在连接关闭之前执行静默重试并抛出相关的异常(SocketTimeoutException).

请注意:
- 我在使用HTTP POST请求时注意到此错误.
- 'read'超时与'connect'超时不同.
- 如果未设置'read'超时(通过调用connection.setReadTimeout(int)设置)(0),或设置为大于该值connection.setConnectTimeout(int),则不会发生此错误.
- 这个问题已经在这里讨论了,但是我没有找到任何令人满意的解决方案.
- 这里可以找到一个有点相关的问题,但我不确定它是否相关(是吗?)

更多背景
我的应用程序用于付钱,所以不重试请求是至关重要的(是的,我知道它可以由服务器处理,我希望我的客户端"正确"无论如何).

设置'read'超时时,如果服务器连接已建立,但服务器在应答之前等待/ sleeps/delays-response'超时'时间(从而引发'read'异常,而不是'connect'异常) ,在引发异常之前发送另一个(静默)请求,导致2个类似的请求,这是不可接受的.

我在找什么样的解决方案?
好吧,一个能很好地解决这个问题/错误的问题,就像这里解释的解决方案一样(但我再说一遍,我认为在这种情况下它是无关紧要的).
此外,我希望保持原始流程不变,这意味着不要强制连接关闭或类似的东西.

我现在要做的是,将'read'超时设置为'connection'超时的两倍(它们同时开始计数),以确保首先引发'connection'异常.我还将尝试在服务器端克服此问题.问题是,这个"读取"超时是有原因的,我当前的实现实际上只是忽略它,并且只处理"连接"超时.

编辑Volley图书馆的RetryPolicy还没有在这个问题上的影响,因为这是一个静默重试.我在图书馆里看起来尽可能深.到处记录/断点,取消了重试的调用.我怎么知道它是99.99%的HttpURLConnection问题.

java android httpurlconnection android-volley

11
推荐指数
1
解决办法
7827
查看次数

标签 统计

android ×1

android-volley ×1

httpurlconnection ×1

java ×1