同じ HTTP サーバーから大量の画像をダウンロードしたいので、そのすべてを同じ TCP 接続で実行したいと考えています。私が見つけることができるのは、NSMutableURLRequest
パイプライン ( HTTPShouldUsePipelining
) を有効にできることだけですが、パイプラインを有効にしたときに一緒に送信する要求をどのように認識するのかわかりません。
私はこれを試しましたが、Wireshark によると、2 つの要求と応答は別々の TCP ストリーム上にあるため、実際に要求をパイプライン処理しているようには見えません。
var request0 = NSMutableURLRequest(URL: NSURL(string: "http://strabo.com/gallery/albums/wallpaper/foo_wallpaper.sized.jpg")!)
var request1 = NSMutableURLRequest(URL: NSURL(string: "http://strabo.com/gallery/albums/wallpaper/foo_wallpaper.sized.jpg")!)
request0.HTTPShouldUsePipelining = true
request1.HTTPShouldUsePipelining = true
var queue = NSOperationQueue()
NSURLConnection.sendAsynchronousRequest(request0, queue: queue) { (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
println("response0")
}
NSURLConnection.sendAsynchronousRequest(request1, queue: queue) { (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
println("response1")
}
Strabo.com がパイプライン処理をサポートしていない場合に備えて、自分のローカル Nginx サーバーでも試してみました。
また、SDWebImageDownloader
どういうわけか HTTP パイプラインを使用していることに気付きました。複数のリクエストが同じ TCP ストリーム内で送信されていることがわかります。ただし、それらすべてを同じストリームで送信するわけではなく、それをやりたいので、カスタムダウンローダーを実装しようとしています。