gpt4 book ai didi

ios - 随机和偶然的网络错误(NSURLErrorDomain 代码=-1001 和 NSURLErrorDomain 代码=-1005)

转载 作者:技术小花猫 更新时间:2023-10-29 10:18:03 28 4
gpt4 key购买 nike

最近几天我尝试从 d00m 调试网络错误。我开始用尽想法/线索,我希望其他 SO 用户拥有可能有用的宝贵经验。我希望能够提供所有相关信息,但我个人无法控制服务器环境。

整个事情始于用户注意到我们应用程序中的几个“网络错误”。该错误似乎是随机发生的,没有任何与互联网连接、iOS 版本或后端更新相关的明显模式。幕后发生的两个错误是:

Error Domain=NSURLErrorDomain Code=-1001 “请求超时。”

更频繁:

Error Domain=kCFErrorDomainCFNetwork Code=-1005 “网络连接丢失。

调试了几天后,我成功地通过发射大约 10 次来重现这些错误(随机发生)。向我们的后端发出 10 个随机(GET 和 POST)请求,每个请求之间有一个随机 sleep 计时器(设置为 1-20 秒)。但是,它只发生在期间。我最近几天经历的是,当“错误期”开始时,我每运行一次或两次代码就会遇到两个错误之一(这意味着错误率为 1/10 或 1/20 请求).此错误率持续几个小时,然后错误消失几个小时,然后重新开始。

关于设置的一些小知识:

  • 发生在设备和模拟器上
  • 发生在 iOS 8.4 和 iOS 7.1 上 - 尽管 8.4 版是我用于测试的主要版本。
  • 我们使用 NSURLSession 进行网络请求。我们还包含 AFNetworking(已更新到最新版本),但我们仅将安全部分用于 SSL Pinning。即使完全关闭 SSL 固定,错误仍然存​​在。

我在过去几天写下的一些发现:

  • 它似乎只发生在我们的生产环境中,它与我们的暂存环境有一些不同的配置。这让我认为它可能与讨论的 keep-alive 错误有关 herehere .然而,我们的运营部门已经设置了一个新的暂存环境,发送与生产环境相同的 keep-alive header ,但这并没有使暂存环境发生错误。
  • 我们的 Android 版应用无法使用相同的请求设置重现错误。此外,我们还没有收到任何关于 Android 应用中“网络错误”的客户问题。

我的直觉说它与服务器环境和 iOS 中的 HTTP 实现有关。然而,我无法找到一个可以证明任何事情的令人信服的模式。我已经使用简单的 Rails 脚本进行了相同的设置,当下一个“错误周期”出现时,我将准备好尝试在 iOS 领域之外重现它。发生这种情况时,我会更新问题。

我不是在寻找涉及重置 wifi 设置、关闭模拟器或类似内容的解决方案,因为我不认为这在生产环境中是可行的解决方案。我也考虑过按照 GitHub 问题中提到的进行 retry-loop-fix,但我认为这是最后的手段。

如果您需要更多信息,请告诉我。

最佳答案

根据我的经验,这类问题通常指向大量数据包丢失,尤其是在蜂窝网络中,多路径干扰和其他问题的微小变化可能会导致流量是否可靠通过。

想到的另一种可能性是质量低劣的 NAT 实现,万一您的服务器的超时间隔足够长,导致 NAT 放弃 TCP 连接,这种情况不太可能发生。

无论哪种方式,唯一可以确定发生了什么的方法是进行数据包跟踪。为此,请通过有线连接将 Mac 连接到互联网,通过 Wi-Fi 启用网络共享,然后将 iOS 设备连接到该 Wi-Fi 网络。然后运行 ​​Wireshark 并告诉它监视网桥接口(interface)。此处说明:

http://www.howtogeek.com/104278/how-to-use-wireshark-to-capture-filter-and-inspect-packets/

从那里,您应该能够准确地看到发送的内容和时间。这可能对理解失败的原因大有帮助。

关于ios - 随机和偶然的网络错误(NSURLErrorDomain 代码=-1001 和 NSURLErrorDomain 代码=-1005),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32501604/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com