2014-11-26 3 views
4

iOS BACKGROUND FETCH n BACKGROUND TRANSFER를 사용하여 앱을 업데이트합니다.iOS8 : NSURLSession : NSURLSessionDataTask '전체 응답을 받기 전에 클라이언트 연결이 끊어졌습니다.'

우리는 많은 파일의 큰 다운로드의 일환으로 MP4를 다운로드 할 때 다운로드가 갑자기 중지하고 오류를 얻을 수 있습니다 :

'Client closed connection before receiving entire response'

HTTP 코드는 여전히 200

우리가 제한에 대한이 없습니다 데이터를 회사의 셀룰러 계정으로 인해 배포하고 iPad에서 단일 응용 프로그램을 사용하므로 관리인은 새로 설치하면 20/30을 초과하는 많은 양의 데이터와 파일을 다운로드하기를 원합니다. 그들은 매일 출간되는 기업 비디오/pdf입니다.

나는 각 다운로드 작업에 내 NSURLSession에서 나는 NSURLSessionDownloadTask를 만들 MP4 또는 PDF 각 URL에 대해 그런 다음 NSURLSession에게 이력서를

NSURLSessionDownloadTask * downloadTask_ = [backgroundSession_ downloadTaskWithURL:url_]; 

화재를

NSURLSession * backgroundSession_ = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier] 

을 만들었습니다. NSURLSession을 모두 반환하면 응용 프로그램이 업데이트되었음을 ​​알리는 알림 메시지가 나타납니다.

필자는 내 Mac에서 CHARLES PROXY를 사용하여 다운로드를 모니터링합니다. 많은 파일이 있기 때문에 시간이 좀 걸리며 영화가 너무 느려질 수 있음을 알았습니다. 일반적으로 다운로드 된 파일을 확인하고 최신 파일 만 다운로드하지만 다운로드가 많으면 mp4에 대한 스트림이 자주 죽는 것으로 나타났습니다. 그들은 200 코드를 가지고 있지만 메시지와 함께

'클라이언트는 전체 응답을 받기 전에 연결을 닫았'

이 중단 일종의 얻을 수 있도록 내 동기화를 완료 내 NSURLSession을 중지 할 수 있기 때문에이 발생할 수 있습니다 어떤 생각을 상태.

IMAGE : OK 다운로드 : 동영상 스트림 디스크에 저장 : 200 : 전체는

IMAGE:OK DOWNLOAD: MOVIE STREAMS AND SAVED TO DISK: 200: Complete

이미지 : 다운로드가 갑자기 중지됩니다

IMAGE: DOWNLOAD SUDDENLY STOPS: IMAGE: DOWNLOAD SUDDENLY STOPS:

어떤 아이디어 : 내가 사용 배경 가져 오기 메시지의 클라이언트가 iOS8 또는 내 응용 프로그램인지 확실하지 않습니다. 각 downloadtask 반환 후 나는 문서에서 MP4로 tmp 파일을 복사하고 내가 세션을 통지 한 후 실패 downloadtask 이들 중 일부는 결코 완료되지 및 걸리면

[session finishTasksAndInvalidate]; 

를 호출합니다. 또 다른 가져 오기를 수행 할 때 이전의 다운로드 작업과 이전 세션을 모두 가져옵니다.

+0

이 문제에 대한 해결책을 찾았습니까? 그것은 정확하게 동일한 문제가 여기에있어 찰스 - 버그면 궁금해 ... – niggeulimann

+1

2 년 전하지만 내 코드에 주석에 따라 시간 제한 inc - 아래 대답을 참조하십시오 –

+0

좋아! 나는 그것을 조사 할 것이다! – niggeulimann

답변

0

내가 이것을 어떻게 해결했는지는 묻지 만, 2 년 래스터.

우리는 다운로드 속도를 높이기 위해 동영상 파일도 축소했습니다. 별도의 설정을 가진 세션과 구성도 기억합니다.나는 하나의 헤더를 설정하지만, 아이폰 OS 8/9이이 세션에서뿐만 아니라 설정을 설정해야으로 나왔을 때 실패했다 -하지만

//----------------------------------------------------------------------------------- 
    //some movie streams time out n get 
    //'http://stackoverflow.com/questions/23428793/nsurlsession-how-to-increase-time-out-for-url-requests' 
    //'Client closed connection before receiving entire response' 

    NSLog(@"urlSessionConfigurationBACKGROUND_.timeoutIntervalForRequest:%f", urlSessionConfigurationBACKGROUND_.timeoutIntervalForRequest); 
    NSLog(@"urlSessionConfigurationBACKGROUND_.timeoutIntervalForResource:%f", urlSessionConfigurationBACKGROUND_.timeoutIntervalForResource); 

    //was 60 
    //urlSessionConfigurationBACKGROUND_.timeoutIntervalForRequest = 240.0; 
    urlSessionConfigurationBACKGROUND_.timeoutIntervalForRequest = 600.0; 
// urlSessionConfigurationBACKGROUND_.timeoutIntervalForResource = 60.0; 
0

당신은 당신의 서버를 요청할 수 있습니다에서 아이폰 OS (10)로 현재 고정 될 수있다 메이트를 통해 콘텐츠 유형을 video/mpeg4로 변경하거나 요청 유형을 GET에서 POST로 변경할 수 있습니다.