Что использовать, когда?NSURLConnection против API сокетов нижнего уровня - PullRequest
2 голосов
/ 02 июля 2011

Я занимаюсь разработкой приложения для iPhone, которое осуществляет потоковую передачу данных (например, точек, подобных exECGData) с сервера и отображает (означает нанесение на карту) их на экране, т. Е. В режиме реального времени.Для этой цели я использую NSURLConnection.

Проблема, с которой я сталкиваюсь, заключается в том, что, поскольку данные так быстро поступают с сервера на iPhone, буферный кэш быстро увеличивается, что приводит к отставанию отображаемых данных от фактических данных, поступающих с сервера.Через некоторое время приложение работает слишком медленно и выдает предупреждение о памяти.

Итак, мой вопрос, как мне обрабатывать эти данные, поступающие с сервера?Должен ли я продолжить с NSURLConnection или перейти к программированию сокетов более низкого уровня?

Ответы [ 2 ]

1 голос
/ 02 июля 2011

Я предлагаю вам реализовать какое-то управление потоком:

Самый простой подход - сбросить данные, если ваши буферы заполнены.Для видеопотоков кадры могут быть отброшены.Я не знаю, возможно ли то же самое с вашими данными.

Другой подход заключается в переключении с API на основе событий на NSURLConnection (где фреймворк контролирует, когда вы должны реагировать)в CFSocket класс, где вы можете читать данные, когда вы готовы к этому.Он более низкоуровневый, требует отдельного потока и некоторой продвинутой логики, такой как переход в спящий режим, когда буфер заполнен, и пробуждение, когда основной поток отобразил больше данных и освободил больше места в буфере.При таком подходе вы, в основном, опираетесь на механизм управления потоком TCP.

Еще один подход заключается в использовании другого сетевого протокола, где у вас больше контроля над объемом отправляемых данных.

0 голосов
/ 02 июля 2011

Я бы использовал ASIHttpRequest потоковую передачу. Вы можете реализовать метод делегата request:didReceiveData:, чтобы получить данные в виде кусков по мере их поступления, дефлировать их, если необходимо, сократить их и отобразить. Если вам нужен кеш, вы всегда можете сохранить его в файл.

...