1

同じ 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 ストリーム内で送信されていることがわかります。ただし、それらすべてを同じストリームで送信するわけではなく、それをやりたいので、カスタムダウンローダーを実装しようとしています。

4

0 に答える 0