当我从我的应用程序中使用API时,我遇到了一个奇怪的问题。有时,无论如何,请求都没有发送,并且在超时结束时失败并出现以下错误:
Error Domain=NSURLErrorDomain Code=-1001 "The request timed out."
我尝试了许多API,例如NSURLConnection
代理,NSURLSession
和NSURLConnection.sendSynchronousRequest
但没有成功。
这是我为突出问题而做的示例项目。 ConnectionBugApp
以下是重现的步骤:
一些可能有用的细节:
如果我使用服务器IP而不是我的域名,则会成功
仅在LTE / 4G网络上出现问题
任何想法或解决方法将不胜感激!请随时询问更多详细信息。
由于
修改
自从我第一次发布以来,我已经编辑了很多描述(希望能让它更清晰,更清晰),如果有些答案或评论不再有意义,我很抱歉。< / p>
答案 0 :(得分:2)
使用异步请求时遇到过这个问题。似乎iOS限制了到单个域的开放连接数,因此所有后续连接都以您描述的方式失败。
如果连接通常很快完成,这可能不会成为问题。
解决方案是限制同一域的开放连接数,以防止这种情况发生。
karlos 发布的答案有效,因为连接的同步性会阻止其他人被打开。
答案 1 :(得分:2)
如评论中所述,我的托管服务启用了DNSSEC(缓存中毒保护)。
禁用它,修复了问题,即使这可能不是一个非常好的解决方案。经过几周的搜索,这将是足够好的。
我会给那些可以解释它的人,或者谁能提供更好的解决方案。
答案 2 :(得分:1)
在您的代码中,您的请求默认超时为60秒,但您可以在代码中更改请求超时,如下所示。
在init(request:NSMutableURLRequest){
self.request = request
self.request.timeoutInterval = 120
super.init()
}
班级更改时间。
class Fizz { def fizzName }
class Buzz { def buzzName }
class Foo { def fooName }
class Widget {
Fizz fizz
List<Buzz> buzzes
List<Foo> foos
}
答案 3 :(得分:0)