73640


以下リンク先の内容を読んだのですが、具体的な事例がイメージできませんでした。

  * [[iOS] timeoutIntervalForRequest - Qiita](https://qiita.com/alt_yamamoto/items/1b9e565439f96b1c9a75)
  * [What's different between timeoutIntervalForRequest vs timeoutIntervalForResource? #1266](https://github.com/Alamofire/Alamofire/issues/1266)
  * [timeoutIntervalForResource | Apple Developer Documentation](https://developer.apple.com/documentation/foundation/nsurlsessionconfiguration/1408153-timeoutintervalforresource)

上記リンクの [2つ目](https://github.com/Alamofire/Alamofire/issues/1266) に記載されている

> The max time interval allowed for downloading a request payload.

request payload とはなんのことでしょうか？

また、デフォルト値は7日とありますが、では仮に7日以降になったときは何が起こるのでしょうか？  
（7日間の間1つのリクエストを処理しているとは思えないので、別の何かが7日なんだと考えています。
もしくはめちゃくちゃ通信回線が遅いときに1リクエストをゆっくりゆっくり7日間通信し続けて、ついに7日たったけど、全部をダウンロードできなかったときに通信が途中で終わるということでしょうか？
ちょっと1つのリクエストを7日間遅い回線で待つというのはありえなさそうですが。そもそも類似の`timeoutIntervalForRequest`は、かなり小さな値が設定されているので、7日待つというこの考えと矛盾するし、やはり何を指しているのかわかりません）


CC BY-SA 4.0
2021-01-28T06:15:30.250
73631
2021-01-28T08:22:41.870
2021-01-28T08:22:25.270
3060
9008
question
swift objective-c
timeoutIntervalForResourceとは何を設定する項目ですか？具体的な例で教えて下さい


ドキュメントとリンク先の記事を読んだ限りではこう言うことです。

クライアント側からサーバへ何百GBもあるファイルを要求したと考えてください。

実際のデータ転送は、ダウンロードが完了するまでずっと一定速度でデータを送ってくるのではなく、断続的飛び飛びにデータが到着するわけです。

[code]

    Data          +-----------+          +-----+                +------+     +-----+
                  |           |          |     |                |      |     |     |
    No data +-----+           +----------+     +----------------+      +-----+     +
            ↑Start                                                                 ↑End
            <-(1)->           <-- (2) --->     <------ (3) ----->      <-(4)->
    
            <---------------------------------- (A) ------------------------------->
    
[/code]

記述から考えれば(1),(2),(3),(4)...の時間の上限値を表すのが`timeoutIntervalForRequest`、
(A)の時間の上限値を表すのが`timeoutIntervalForResource`だと記載していると読み取れます。

> request payload とはなんのことでしょうか？

payloadとは積載物のこと、10GBのファイルを要求しているのであれば、10GBのデータが積載物です。

> デフォルト値は7日とありますが、では仮に7日以降になったときは何が起こるのでしょうか？

明記されていませんが、タイムアウトによるエラー終了になると考えられます。

> 7日間の間1つのリクエストを処理しているとは思えない

帯域の極めて細い線を通じて何十GBもあるファイルをダウンロードするのに半日とかそれ以上かかった覚えはないですか。最新のXcodeは10GBほどありますが、普通に我が家からは光回線で接続していても、ダウンロードだけで2時間近くかかりました。7日間はそれにしても長すぎるとは思いますが、「これ以上は許さない」と言う制限値ですから、余裕を持ってデフォルト値を決めているのでしょう。

>
> めちゃくちゃ通信回線が遅いときに1リクエストをゆっくりゆっくり7日間通信し続けて、ついに7日たったけど、全部をダウンロードできなかったときに通信が途中で終わるということでしょうか？

> ちょっと1つのリクエストを7日間遅い回線で待つというのはありえなさそうですが。

自分はそんなに待てない、と言うのと、そんな状況は発生し得ないと言うのを勘違いしていませんか?
ドキュメントにもバックグラウンド動作のことが触れられています(すいませんが、具体的にどう言った事例を想定しているのかまでは、理解が及んでいません)が、別に「ダウンロード中」の表示でユーザを7日間待たせても良いと言っているわけではありません。

> そもそも類似のtimeoutIntervalForRequestは、かなり小さな値が設定されているので、7日待つというこの考えと矛盾する

特に「矛盾」は無いでしょう。帯域制限されたサーバが、10秒ごとに1MBずつデータを送ってくるものとしてください。10秒をはるかに超える時間データが届かなければ接続が切れているかもしれませんが、たとえ接続が切れた兆候がなくても、ダウンロード終了までに何日もかかる可能性はあるわけです。

`timeoutIntervalForRequest`の方は、接続断が疑われるくらいのデータ中断をチェックするもの、一方`timeoutIntervalForResource`は、たとえ接続断は起こっていないにしても全部を受け取るのにここまでかかってたんじゃ困ると言うチェックをするもの、と考えられます。

* * *

以上ドキュメントを読んだだけでの話ですので、明らかに矛盾する動作を見つけられた場合にはお知らせください。`timeoutIntervalForResource`を小さめの値(1時間以内)に設定して、順調にダウンロードしても数時間はかかると言うファイルをダウンロードしてみれば実験できるかと思います。


CC BY-SA 4.0
2021-01-28T08:16:40.570
73640
2021-01-28T08:22:41.870
2021-01-28T08:22:41.870
3060
13972
73631
answer