0

NSURLConnection で非常に奇妙な問題が発生しています。次の関数を使用して、viewDidLoad メソッドで 3 つの非同期 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];
}

最初の 2 つの接続は期待どおりに機能します。ただし、3 番目はタイムアウトが発生するまでハングします。失敗後に再試行すると、呼び出しが成功します。リクエストの順序は関係ないようです - 失敗するのは常に最後に呼び出されたものです。私はリクエストの送信先のサーバーを所有しており、着信ネットワーク トラフィックを監視すると、最初の 2 つのリクエストが表示されますが、最初のタイムアウトまで 3 番目の NSURLConnection に対して 3 番目のリクエストは表示されません。さらに奇妙なのは、タイムアウトが発生した後、コントローラーから離れて再び戻ると、アプリを再起動するまで問題が再現されなくなることです。

誰がこれを引き起こしているのか考えていますか?

4

1 に答える 1

3

一部のサーバーは、1 つのクライアントからの同時接続数を 2 つに制限します。この場合、最初の 2 つの接続は成功し、最初の 2 つの接続のいずれかが完了するまで 3 番目の接続はハングします。これは、あなたが見ているものを説明するように聞こえます。

于 2013-04-05T19:54:27.053 に答える