Можно ли измерить потерю пакетов в приложении для iOS?
Я создаю часть приложения, которая потребует от пользователя загружать файлы различного размера. В настоящее время я использую код Reachability от Apple, чтобы сообщить мне, есть ли у меня соединение.
( http://developer.apple.com/library/ios/)
Хотя код достижимости может отслеживать "наличие соединения", он не может сообщить мне об ухудшающемся соединении. Казалось бы, мне нужно расширить функциональность кода Apple, чтобы удовлетворить мои требования. Могу ли я измерить количество или процент пропущенных пакетов во время передачи данных? Это было бы полезно, чтобы я мог отправить сообщение пользователю и иметь возможность приостановить или остановить загрузку.
1 ответ
Нет доступного API для iOS, который глубоко подключается к сетевому стеку, который сообщает вам, когда и почему отбрасываются пакеты. Он может быть отброшен на маршрутизаторе или локально из-за ошибки контрольной суммы.
Что это за данные? Я предполагаю, что TCP. Возможно, вы сможете определить качество соединения, изучив пропускную способность. Вы можете посчитать, сколько байтов вы получаете в секунду.
TCP имеет то, что называется контролем перегрузки, и конечные хосты (устройства iOS) будут снижать свою пропускную способность, когда пакеты отбрасываются и остаются неподтвержденными. Таким образом, пропускная способность может коррелировать с качеством сети. Однако ваша пропускная способность может варьироваться по многим причинам, таким как перегрузка сети, формирование пакетов, QoS и т. Д.
В iOS нет общедоступного API для контроля уровня сигнала Wi-Fi. Существует частный API, но ваше приложение не будет одобрено в магазине приложений, если вы используете частный API.