Iphone способен автоматически приостанавливать и возобновлять загрузку файлов в многозадачной среде - PullRequest
1 голос
/ 28 мая 2011

Недавно я разработал простое приложение для загрузки файлов в Iphone. Я тестировал это в Iphone 3gs и нашел что-то интересное.

Я закрываю приложение, когда начинается загрузка файла. Через некоторое время я открыл приложение (скажем, через 6 секунд), загрузка фактически начинается с того места, где оно осталось.

Как программное обеспечение может приостанавливать и возобновлять загрузку http. (Мой сервер Tomcat не имеет возможности потоковой передачи или возобновления)

Мои настройки, Tomcat, с сервлетом, который в основном читает из файловой системы и отправляет выходы. Iphone 3gs, и простое приложение для загрузки файлов, я не включил никакие UIBackgroundModes. добавлен индикатор выполнения для представления состояния

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

То, что вы наблюдаете, связано с тем, что время ожидания соединения не срабатывает в то время, когда ваше приложение не было активным. Более подробно:

  1. когда вы открываете соединение и начинаете передавать через него данные, ОС связывает это соединение с тайм-аутом (например, 90 с, 60 с, 300 с, в зависимости от некоторых настроек, которые обычно можно настроить, хотя не всегда легко);

  2. этот тайм-аут используется для контроля состояния соединения; если данные не передаются в течение периода, превышающего время ожидания, то соединение считается разорванным или предполагается, что оно было закрыто другой стороной;

  3. это необходимо, потому что качество удаленного соединения сильно варьируется, и если вы проверите свою передачу, вы заметите, что они могут «легко» остановиться на несколько секунд или даже больше;

  4. если передача данных на некоторое время останавливается, но возобновляется до истечения времени ожидания соединения, сетевые протоколы (все они, на стороне клиента и на стороне сервера) могут по своей природе возобновить передачу данных, как это было не было прерываний (сетевые протоколы имеют специфические особенности, связанные с этим, такие как разбиение ваших данных на более мелкие пакеты и нумерация каждого пакета, чтобы гарантировать, что все они передаются и что их можно переставить в соответствии с порядком отправки, если что-то сбилось с пути сообщение);

Таким образом, это должно объяснить тот факт, что ваше приложение после 6-секундной остановки возобновило соединение без помех.

Если вы оставите приложение закрытым на более длительный период времени, вы увидите, что соединение разорвется.

0 голосов
/ 28 мая 2011

Разделение больших данных на маленькие порции является основной функцией стандарта HTTP.См. HTTP1.1 - Раздел 14.16 - Диапазон содержимого для получения подробной информации.Реализация Cocoa более чем вероятно обрабатывает все это по умолчанию.Большая загрузка будет кэшироваться во время передачи и автоматически возобновляться по запросу.

Серверу и iPhone действительно не требуется никакого дополнительного программного обеспечения для поддержки этой функции.В контексте связи HTTP, каждая загрузка - это просто количество пакетов данных, отправленных с сервера, и любой из этих пакетов может занять длительное время, чтобы фактически достичь приемного устройства.Возобновленная загрузка - это та же самая загрузка, с необычно большой задержкой между пакетами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...