我使用 Flutter 制作了一个移动应用程序。这个应用程序的数据量很大(API 和地图图块)。
它始终适用于 Android、iOS 模拟器和 Windows。
但是在物理 iOS 设备(发布和调试模式)上,同样的情况:
Error: SocketException: Failed host lookup: 'site.com' (OS Error: nodename nor servname provided, or not known, errno = 8)
Error: SocketException: Connection failed (OS Error: Too many open files, errno = 24), address = site.com, port = 443
上述错误有数百个,因为它们与地图图块有关。 但是,对同一“site.com”(API/JSON) 的早期 http 请求(大约 10 个)不会失败。 尽管如此,我在应用程序的顶层进行了网络检查,并打印了它声称“主机查找失败”的同一“站点”的成功信息。
为什么首次安装时一切顺利,但在后续运行中,网络请求失败和/或打开的文件过多?
连续 4 次关闭并重新打开应用程序在 iOS 方面“做了什么”,始终解决了问题(对于会话)?
我还认为这可能与 IPv4/IPv6 有关。在工作的设备上,我将 DNS 设置为自动/路由器,而问题设备使用 1.1.1.1 和 1.0.0.1。
当我在 iPhone 11 上将设备切换到 LTE 时,突然间效果非常好!每次我连续多次打开和关闭应用程序时都没有丢失请求。然后今天,又出现了古怪的行为。在我的 iPhone 15 上,我也遇到了 5G 丢失图块/请求的情况。在所有情况下,重新启动应用程序 4 次似乎会重置某些内容,因此一切都会再次运行。
我还在我的应用程序中打印了 IP 字符串,看看是否有任何差异。使用 Wifi 时,它是 IPv4;使用 LTE 时,它是 IPv6。不管怎样,同样奇怪的行为。
唯一一致的是,我的新 Mac 上的 Android 和 iOS 模拟器从来没有出现过问题。只是实体 iPhone。
更新:这个帖子非常模仿我正在经历的事情。
已修复。
我安装了native_dio_adapter来配合flutter_map包使用的dio。
现在没有文件限制错误。此外,网络请求明显更快。