连续使用三个NSURLConnections导致第三次调用挂起

时间:2013-04-05 19:51:05

标签: ios nsurlconnection

我遇到了一个非常奇怪的NSURLConnection问题。我有一个控制器,使用以下函数在viewDidLoad方法中生成三个异步GET请求:

+ (void)connectAsyncWithURL:(NSURL *)url httpMethod:(NSString *)httpMethod delegate:(id <NSURLConnectionDelegate>)delegate timeout:(NSTimeInterval)timeout
{
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:timeout];
    [request setHTTPMethod:httpMethod];
    [NSURLConnection connectionWithRequest:request delegate:delegate];
}

前两个连接按预期工作。但是第三个会挂起,直到超时发生。失败后重试会导致呼叫成功。请求所处的顺序似乎并不重要 - 它总是被称为最后一个失败的那个。我拥有正在进行请求的服务器,并且观察传入的网络流量向我显示前两个请求,但第三个NSURLConnection在第一个超时之前没有出现。更奇怪的是,在超时发生后,如果我离开控制器并再次返回,则在重新启动应用程序之前问题不再可重现。

有没有人知道造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:3)

某些服务器会限制从单个客户端到两个客户端的同时连接数。如果是这种情况,那么前两个连接将成功,第三个连接将挂起,直到前两个连接中的一个完成。听起来这样可以解释你所看到的。