是啥导致连接中止?

Posted

技术标签:

【中文标题】是啥导致连接中止?【英文标题】:What causes connection abort?是什么导致连接中止? 【发布时间】:2018-11-23 21:39:01 【问题描述】:

在 iPhone 上,有时当我打开应用程序时,所有即时 HttpClient 请求都会失败。我看到一条消息说...

软件导致连接中止

重试就没有问题了。

这是什么原因造成的?

首次在 iPhone 和 android 上打开应用程序以及通过单击通知打开应用程序时会发生这种情况。在这两种情况下,都会立即发送 Web 请求。

是否有可能连接还没有准备好,而不是等待,而是抛出异常?

【问题讨论】:

没有任何代码这是不可能的 你认为这可能是我的代码的结果? @IanWarburton 没有任何代码和有关应用程序状态的更多信息,很难说,但我可以假设如果应用程序正在运行并放入后台然后带回来,当应用程序被放置到后台时,你会因为不取消请求而重试超时(在应用程序中看到了一百万次)......但这只是一个疯狂的摆动......再次,更多需要应用信息.... @SushiHangover 当应用程序后台运行时您应该取消请求? @IanWarburton 当应用程序进入后台状态时,执行会暂停,并且有生命周期事件向您传达这种情况,然后您有 X 量的时间来执行代码清理。因此,如果需要在应用程序恢复时重试,则应取消并缓存诸如飞行中的 HttpClient 请求之类的事情,即作为“经验法则”,任何基于任务的都应通过您提供给该任务的取消令牌来取消(这取决于操作系统和应用程序的注册方式,即 Android 前台服务、ios VoIP 应用程序等...) 【参考方案1】:

今天遇到了类似的问题! 我在启动 httprequest 之前添加了一个await Task.Delay(200);(仅当应用程序从通知点击启动时)并且问题已修复。

【讨论】:

我使用github.com/App-vNext/Polly 添加了请求重试。它并不总是出错,所以总是拖延似乎很可惜。

以上是关于是啥导致连接中止?的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 7:对等方或软件重置连接导致连接中止

“软件导致连接中止:recv failed”的原因

Android蓝牙:软件导致连接中止IOException? [复制]

JnrpeClient:java.net.SocketException:软件导致连接中止:recv 失败

在 AppSync 中获取“软件导致连接中止”

java.net.SocketException:软件导致连接中止:recv 失败,出现 java.net.SocketException:连接重置 [重复]