2

서버에서 데이터를 스트리밍 (e.x.ECGData와 같은)하는 iPhone 응용 프로그램을 개발 중이며 화면에 표시 (즉, 플로팅을 의미)합니다. 즉 라이브 스트리밍입니다. 이를 위해 NSURLConnection을 사용하고 있습니다.언제 사용합니까? NSURLConnection 대 ​​낮은 레벨의 소켓 API

내가 직면 한 문제는 데이터가 서버에서 iPhone으로 빠르게 전송되고 있기 때문에 캐시 버퍼가 빠르게 증가하여 표시된 데이터가 서버에서 오는 실제 데이터보다 뒤쳐지게된다는 것입니다. 잠시 후 응용 프로그램이 너무 느리게 진행되어 메모리 경고가 발생합니다.

내 질문은, 어떻게 서버에서 오는이 데이터를 처리해야합니까? NSURLConnection으로 계속 진행해야합니까, 아니면 하위 레벨 소켓 프로그래밍을해야합니까?

답변

0

나는 ASIHttpRequest 스트리밍을 사용합니다. 델리게이트 메서드 request:didReceiveData:을 구현하여 데이터가 들어올 때 청크로 가져와 필요한 경우 수축시켜이를 보완하고 표시 할 수 있습니다. 캐시가 필요한 경우 언제든지 파일에 저장할 수 있습니다.

+0

그래, 데이터 수집, 구문 분석 및 다음 NSURLConnection 사용하여 화면에 음모 같이 비슷한 단계를 통해 갈거야. 나는 ASIHttpRequest가 유사하게 될 것이라고 의심하고 있으며 위에서 언급 한 것과 같은 문제를 지속 할 것인가? – Mahesh

+1

왜 ASIHTTPRequest 도움말을 사용해야합니까? NSURLConnection을 사용하여 동일한 작업을 수행 할 수 있습니다. – Codo

1

난 당신이 흐름 제어의 일종을 구현 제안 :

가장 간단한 방법은 버퍼가 가득 경우 데이터를 삭제하는 것입니다. 비디오 스트림의 경우 프레임을 삭제할 수 있습니다. 나는 당신의 데이터로 같은 것이 가능한지 여부를 모른다.

또 다른 방법은 당신이 준비가되면 데이터를 읽을 수 CFSocket 클래스 (프레임 워크 컨트롤을 사용하면 반응이) 있는 NSURLConnection의 이벤트 기반 API로 전환하는 것입니다. 저수준이기 때문에 별도의 스레드와 일부 고급 논리가 필요합니다. 이는 버퍼가 가득 차면 잠자기 상태가되고 주 스레드가 더 많은 데이터를 표시하고 버퍼에 더 많은 공간을 확보했을 때 깨어나는 것과 같은 고급 논리가 필요합니다. 이 방법을 사용하면 기본적으로 TCP 흐름 제어 메커니즘을 기반으로 구축됩니다.

또 다른 접근법은 전송되는 데이터의 양을 제어 할 수있는 또 다른 네트워크 프로토콜을 사용하는 것입니다.