我想从同一个HTTP服务器下载大量图像,所以我想在同一个TCP连接上完成所有这些操作。我所能找到的是NSMutableURLRequest
允许我启用流水线操作(HTTPShouldUsePipelining
),但我不知道在启用流水线操作时它是如何知道哪些请求一起发送的。
我试过这个,根据Wireshark的说法,这两个请求和响应都是在不同的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")
}
我也试过我自己的本地Nginx服务器,以防Strabo.com不支持流水线操作。
此外,SDWebImageDownloader
以某种方式使用HTTP流水线技术,我已经注意到了。我看到在同一TCP流中发送了多个请求。但是,它并没有在同一个流上发送所有这些内容,我想这样做,所以我一直在尝试实现自定义下载程序。