2016-08-23 5 views
1

私はSwiftプロジェクトに取り組んでおり、多くのAPIを消費します。すべてうまくいっていますが、時にはCode = -1001「要求がタイムアウトしました。 APIの呼び出し中にエラーが発生しました。正しくテストするために、私はループを使用して、同じAPIを呼び出して1000回反復しています。スイフトネットワークコール:待ち時間が長くなり、最終的にタイムアウトを要求します

私は公開APIを使用しています。 APIは

let apiString = "https://oc-index.library.ubc.ca" 

であると私のループは、印刷応答を確認しながら

for i in 0 ..< 1000 { 
    Alamofire.request(.POST, apiString).responseJSON { response in 
     print(response.debugDescription) 

     if response.result.isFailure { 
      print("Failure") 
     } 
    } 
} 

は今、私はレイテンシがすべての新しいAPIレスポンスに増加し、60.14秒、最終的に要求のタイムアウトになっている参照です。 APIを呼び出している間に初めて、待ち時間は2.225秒で、ログのタイムラインでは、最後に成功したAPIの待ち時間は60.14秒でした。

ループで最初にヒットしたときのAPIのタイムライン(i = 1の場合)。最後に成功したAPI

[Timeline]: Timeline: { "Request Start Time": 493671593.859, "Initial Response Time": 493671621.500, "Request Completed Time": 493671621.513, "Serialization Completed Time": 493671621.519, "Latency": 60.140 secs, "Request Duration": 60.140 secs, "Serialization Duration": 0.007 secs, "Total Duration": 60.147 secs } 

[Timeline]: Timeline: { "Request Start Time": 493671593.424, "Initial Response Time": 493671595.649, "Request Completed Time": 493671595.684, "Serialization Completed Time": 493671595.688, "Latency": 2.225 secs, "Request Duration": 2.260 secs, "Serialization Duration": 0.004 secs, "Total Duration": 2.264 secs } 

タイムラインしかし、私は同期的にそれを実行した場合、そのようなタイムアウトのことはありません。 APIは1000回呼び出され、失敗のケースはありません。

APIを複数回非同期にヒットしたときに、このようにレイテンシが増加する理由はわかりません。私はタイムアウト時間を増やすことによってエラーを回避できることを知っています。しかし、私はそれが最初に起こっている理由を知りたい。

ご協力いただければ幸いです。

答えて

1

ネットワーキングスタックでは、特定の数の要求が同時に実行されるだけで、一部の処理が完了するまで新しい要求の発行がブロックされます。したがって、1000件のリクエストはできるだけ早く開始されますが、後ろのリクエストは、実際に接続する前に完了するまで待つ必要があるため、時間がますます増加します。

は、そのような状況に対処する方法についていくつかの詳細については、このスレッドを参照してください。 NSURLSession concurrent requests with Alamofire

+0

は大丈夫理解し、応答に感謝。 –

関連する問題